I noticed just now that the following code can be compiled with clang/gcc/clang++/g++, using c99, c11, c++11 standards.
int main(void) {
int i = i;
}
and even with -Wall -Wextra, none of the compilers even reports warnings.
By modifying the code to int i = i + 1; and with -Wall, they may report:
why.c:2:13: warning: variable 'i' is uninitialized when used within its own initialization [-Wuninitialized]
int i = i + 1;
~ ^
1 warning generated.
My questions:
- Why is this even allowed by compilers?
- What does the C/C++ standards say about this? Specifically, what's the behavior of this? UB or implementation dependent?
-Wall -Wextra. That's about the bare minimum in warnings. See this answer of mine to an older question about-Wall...-Wallis enough for me to get a warning for gcc