Search code examples
cvariable-declaration

Assigning a variable to itself in its own declaration


#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?


Solution

  • 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.