我刚刚注意到,以下代码可以使用clang/gcc/clang++/g++编译,使用c99、c11、c++11标准。
即使使用了
通过将代码修改为
我的问题:
- 编译器为什么允许这样做? - C/C++标准对此有何规定?具体来说,这种行为是未定义的还是依赖于实现?
int main(void) {
int i = i;
}
即使使用了
-Wall -Wextra
,编译器也没有报告任何警告。通过将代码修改为
int i = i + 1;
并使用-Wall
,它们可能会报告以下警告:why.c:2:13: warning: variable 'i' is uninitialized when used within its own initialization [-Wuninitialized]
int i = i + 1;
~ ^
1 warning generated.
我的问题:
- 编译器为什么允许这样做? - C/C++标准对此有何规定?具体来说,这种行为是未定义的还是依赖于实现?
-Wall -Wextra
中没有任何“even”的东西。这是警告的最低要求。请参见我对旧问题关于-Wall
的这个答案。 - DevSolar