为什么以下代码不会在MSVC中生成警告

Sma*_*acL 6 c++ compiler-warnings

我有一段代码可以总结如下;

void MyFunc()
{
   int x;
'
'
   x;  
'
'
}
Run Code Online (Sandbox Code Playgroud)

我原本以为只是引用一个变量,无论如何都不修改它或者无论如何都要使用它的值应该产生一个警告.在VS2003中它既不会,也不需要lint来拾取它.

我意识到它不会影响执行,但由于它是一段什么都不做的代码,程序员无疑打算做某事,为什么它没有被标记?

同样,你会期望x = x是警告吗?

编辑: 修改过的问题,因为这构成了警告的良好候选者,但不是错误.回复表明,其他编译器可以更好地处理这个问题.稍后会试用VS2008并发布结果.

小智 1

您需要使用更好的编译器:-) 使用 -Wall 和 -pedantic 标志进行编译,GCC C++ 编译器给出以下代码:

int main() {
    int x = 0;
    x;
}
Run Code Online (Sandbox Code Playgroud)

产生此诊断:

ma.cpp:3: warning: statement has no effect
Run Code Online (Sandbox Code Playgroud)