这段代码可以编译,但在Visual Studio中出现了运行时错误:
运行时检查失败#3-变量'x'被使用而没有初始化...
int x = 15;
int main()
{
int x = x;
return 0;
}
当我点击继续按钮时,程序恢复运行,但 x 的内容已经损坏(例如显示 -8556328
而不是 15
),我不明白这种行为背后的原因。
为什么这段代码没有问题,而且 int 数组也被正确声明了?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
gcc 4.8.4
编译并且这个程序可以在打开-Wall -Wextra -pedantic
的情况下运行。clang 7.0.0
编译它,也可以直接运行。但是,如果在int x=x;
后添加printf("%d\n", x);
(我猜任何对x
的实际使用都可以), 编译器会给出更友好的警告:warning: variable 'x' is uninitialized when used within its own initialization [-Wuninitialized]
。gcc
即使有printf
并打印了0
,仍然可以编译和运行。但是在通过valgrind运行程序时,会出现“Conditional jump or move depends on uninitialised value(s)” 的错误提示。 - Joakim