偶発的なマクロ置換は、名前が関数と競合するマクロを意図せずに使用することです。
Vera++ のチェックが防止するように設計されている状況は、システム ヘッダーの誤動作 (最も有名な例) が、同じ名前のアプリケーション定義関数や、 、、などの標準ライブラリ関数にさえ干渉するマクロを<windows.h>
定義min
している場合に発生します。(他の名前も衝突を引き起こすことが知られています。)max
std::min<T>
std::max<T>
std::numeric_limits<T>::min()
マクロは名前空間を認識しないため、関数を as として呼び出しても、 はプリプロセッサによって展開されたままになるため、役に立ちません。この問題を回避するには、そのような関数を として呼び出す必要があります。これにより、 と で通常行われるように、 として定義されている場合、マクロ展開が防止されます。別の利用可能なオプションは、使用する前ですが、不正なヘッダーを含めた後です。Boost は独自の置換防止マーカーを提供しますが、その自己記述性は、Boost が導入する煩雑さによって相殺されます。std
::min(...)
min
(function)(args...)
#define function(arg1, arg2) ...
min
max
#undef
の組み込みを制御する場合は、その組み込みの前に<windows.h>
行うこともできます。これにより、およびマクロを定義しないように指示されます。#define NOMINMAX
windows.h
min
max