为什么缺少名称的函数调用仍然可以编译



一位开发人员在复制和粘贴类似类型的代码时犯了一个错误,而不是

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都没有显示此警告。

谢谢。

为什么要编译这行代码?

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

没有给出任何警告,这行代码在做什么?

这取决于编译器和您在其上设置的警告级别。有些编译器会在表达式不执行任何操作时发出警告。例如,带有-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?

最新更新