#include <stdio.h>
int main() {
int c = c;
printf("c is %i\n", c);
return 0;
}
I'm defining an integer variable called c
, and I'm assigning its value to itself. But how can this even compile? c
hasn't been initialized, so how can its value be assigned to itself? When I run the program, I get c is 0
.
I am assuming that the compiler is generating assembly code that is assigning space for the the c
variable (when the compiler encounters the int c
statement). Then it takes whatever junk value is in that un-initialized space and assigns it back to c
. Is this what's happening?
I remember quoting this in a previous answer but I can't find it at the moment.
C++03 §3.3.1/1:
The point of declaration for a name is immediately after its complete declarator (clause 8) and before its initializer (if any), ...
Therefore the variable c is usable even before the initializer part.
Edit: Sorry, you asked about C specifically; though I'm sure there is an equivalent line in there. James McNellis found it:
C99 §6.2.1/7: Any identifier that is not a structure, union, or enumeration tag "has scope that begins just after the completion of its declarator." The declarator is followed by the initializer.