为什么缺少名称的函数调用仍会编译?

时间:2018-08-03 16:58:20

标签: c++ clangpowertools

开发人员正在复制和粘贴类似类型的代码,并在

处犯了一个错误。
int x = 100;
int y = 100;
int z = 100;
aFunction(x, y, z);

他们不小心输入了

int x = 100;
int y = 100;
int z = 100;     
(x, y, z);  //What does this Line of Code do?

此代码已成功编译,没有发出警告。在VS 2015中尝试调试此代码时,调试器将跳过此行代码。

为什么这行代码会编译并且不发出警告,这行代码在做什么?

更新: 在Visual Studio 2015中生成所有警告都会显示此警告,但级别4则不会。奇怪的是,代码分析和Clang Power Tools均未显示此警告。

谢谢。

1 个答案:

答案 0 :(得分:7)

  

为什么这行代码可以编译?

因为表达式在语法上是正确的

  

不发出警告,这行编码在做什么?

这取决于您在其上设置的编译器和警告级别。如果表达式不执行任何操作,某些编译器会警告您。例如带有-Wall标志的g ++给出以下内容:

 t.cpp:4:5: warning: left operand of comma operator has no effect [-Wunused-value]
     (x, y, z);  //What does this Line of Code do?

 t.cpp:4:8: warning: right operand of comma operator has no effect [-Wunused-value]
     (x, y, z);  //What does this Line of Code do?