PVSスタジオは危険な表現について苦情を言います。パラメータ「MSG」が次のコードのC++コードを括弧で囲まなければなりませんPVSスタジオが危険なマクロ表現に苦情を言います
#include <iostream>
#define X ("X")
#define Y ("Y")
#define Z ("Z")
#define FRED(msg) msg << Z // <<-- Warning from PVS Studio
#define WILMA(msg) X << FRED(msg)
#define BUDDY(msg) Y << FRED(msg)
int main()
{
std::cout << WILMA(BUDDY("xxxxxx")) << std::endl;
return 0;
}
PVS Studioから警告メッセージが、このツールからの提案および追加括弧後
V1003 The macro 'FRED' is a dangerous expression. The parameter 'msg' must be surrounded by parentheses. sample_demo.cpp 7
です: の#include
#define X ("X")
#define Y ("Y")
#define Z ("Z")
#define FRED(msg) (msg) << Z
#define WILMA(msg) X << FRED(msg)
#define BUDDY(msg) Y << FRED(msg)
int main()
{
std::cout << WILMA(BUDDY("xxxxxx")) << std::endl;
return 0;
}
この変更により、無効なコードが作成されたようです。次のようにVS2017からコンパイルエラーがある:
error C2296: '<<': illegal, left operand has type 'const char [2]'
error C2297 : '<<' : illegal, right operand has type 'const char [7]'
質問
私はPVSメーカーからの提案は、この特定の場合には正しくないかなり確信しています。私は何かを明らかに欠場し、ツールは正しいですか?事前に多くの感謝。
@bartoli:これは既に説明したのと同じコンパイラエラーになります。 – orbitcowboy
https://stackoverflow.com/questions/277258/how-do-i-see-a-c-c-source-file-after-preprocessing-in-visual-studio –