受到这篇文章的回答的启发。为什么这是 NaN
我有以下代码:
int main()
{
const int weeks = 10;
const int salespersons = 9;
const int days = 30;
double weekly_sales[weeks][salespersons][days];
double total_weekly_sales[weeks];
double total_overall_weekly_sales[salespersons];
int a;
cout << "a = " << a <<endl;
cout << total_weekly_sales[0] <<endl;
for(int w=0; w < weeks;w++)
{
for(int d =0; d < days; d++)
{
for(int s=0; s < salespersons; s++)
{
total_weekly_sales[w]+=weekly_sales[w][s][d];
total_overall_weekly_sales[s]+= weekly_sales[w][s][d];
}
}
}
cout << total_weekly_sales[0] <<endl;
}
它将输出以下内容:
a = 0
0
0
在 gcc 4.5.3 下,带有编译选项-Wall
.
我还在这里编译了代码:http: //liveworkspace.org/code/94SOj $2。与上面相同的输出。
我也在VS2010下编译了代码。VS2010 给出警告如下:
warning C4700: uninitialized local variable 'a' used
warning C4700: uninitialized local variable 'total_weekly_sales' used
当我跑的时候:
Run-Time Check Failure #3 - The variable 'a' is being used without being initialized.
我知道不初始化局部变量并使用它们是不好的做法。我也明白这会有问题。
我的问题是:
在 C++ 标准中:有没有地方说使用未初始化的局部变量会导致未定义的行为?为什么它在不同的编译器下表现不同?这是否意味着该标准实际上并未强制要求所有编译器都应针对using uninitialized local variable
? 那么,您如何从编译器输出中判断它是未定义的行为呢?
谢谢。