【发布时间】:2015-01-19 17:39:26
【问题描述】:
我尝试过的所有 C 编译器都不会在下面的代码 sn-p 中检测到未初始化的变量。然而,这里的情况很明显。
不用担心这个 sn-p 的功能。这不是真正的代码,为了调查这个问题,我把它删掉了。
BOOL NearEqual (int tauxprecis, int max, int value)
{
int tauxtrouve; // Not initialized at this point
int totaldiff; // Not initialized at this point
for (int i = 0; i < max; i++)
{
if (2 < totaldiff) // At this point totaldiff is not initialized
{
totaldiff = 2;
tauxtrouve = value; // Commenting this line out will produce warning
}
}
return tauxtrouve == tauxprecis ; // At this point tauxtrouve is potentially
// not initialized.
}
另一方面,如果我注释掉 tauxtrouve = value ;,我会收到 "local variable 'tauxtrouve' used without having been initialized" 警告。
我尝试了这些编译器:
- GCC 4.9.2 with -Wall -WExtra
- 启用所有警告的 Microsoft Visual C++ 2013
【问题讨论】:
-
我不知道,但也许它的编译器优化?我也很想知道。希望我们能尽快得到答案。
-
如果将
-pedantic标志添加到gcc 会发生什么? -
我不熟悉如何测试初始化,但请查看我通过谷歌搜索找到的gcc.gnu.org/wiki/Better_Uninitialized_Warnings。特别是
CCP assumes a value for uninitialized variables。如果我对自己有把握,我会做出这样的评论和回答。 -
Visual Studio 2013 告诉我“错误 C4700:使用了未初始化的局部变量 'totaldiff'”。
标签: c