gpt4 book ai didi

c++ - PVS Studio 提示危险的宏表达式

转载 作者:行者123 更新时间:2023-11-30 02:23:09 25 4
gpt4 key购买 nike

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

按照此工具的建议并添加括号: #包括

#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 的建议在这种特殊情况下是不正确的。我错过了一些明显的东西并且该工具是正确的吗?非常感谢。

最佳答案

我认为这个警告针对的是算术表达式。例如,如果 msg0xf & 8省略括号可能会产生不同的结果,因为 operator <<优先级高于 & .

关于c++ - PVS Studio 提示危险的宏表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46464510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com