【发布时间】:2011-03-29 14:41:14
【问题描述】:
例如,以下代码编译时没有任何警告:
#include <stdio.h>
int i = i + 1;
int main(int argc, char *argv[])
{
fprintf (stderr, "%d\n", i);
return 0;
}
我认为这在语法上是非法的,因为i在声明之前就使用了,对吗?
在我看来,int i = i + 1; 的出现肯定是一个错误,为什么编译器不警告它?我使用 gcc 4.5.1。
【问题讨论】:
-
这肯定是未定义的行为......
-
我想如果它做任何事情,那么它会为 i 留出内存,然后在赋值中它使用存储在该部分内存中的任何值(因此存储在 i 中的结果值将不可预测)。
-
您的代码没有编译。 gcc 给出错误
initializer element is not constant。 -
在
C++中,我认为使用#include <cstdio>... 甚至可能是cout和朋友而不是fprintf是更好的形式 -
呵呵:用
C和C++标记的问题可能一开始就不应该有这些标记:D
标签: c++ c initialization definition