我试过的所有C编译器都不会在下面的代码片段中检测到未初始化的变量。然而,这种情况在这里很明显。编译器没有检测到明显未初始化的变量
不要担心此代码段的功能。这不是真正的代码,我为了调查这个问题而剥光了它。
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与-Wall -Wextra
- 微软的Visual C++ 2013中的所有警告启用
我不知道,但也许它的编译器的优化?我也很想知道。希望我们很快会得到答案。 – 2014-11-21 14:35:36
如果将'-pedantic'标志添加到gcc会发生什么? – avgvstvs 2014-11-21 14:35:49
我并不熟悉初始化是如何测试的,但请查看https://gcc.gnu.org/wiki/Better_Uninitialized_Warnings,这是我通过Google搜索发现的。特别是'CCP为未初始化的变量赋值“。如果我确信自己,我会发表评论和回答。 – 2014-11-21 14:42:54