PVS Studio 抱怨一个危险的表情。在以下代码 C++ 代码中,参数“msg”必须用括号括起来
#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 Studio 的建议在这种特殊情况下是不正确的。我错过了一些明显的东西并且工具是正确的吗?提前谢谢了。