Search code examples
cgcccompiler-errorsobsolete

Can't define variables after any operation?


My C language teacher claims that all variables must be defined before any operation. I can somehow recall it's a very old feature of C (no later than 1990) but I can't reproduce it with GCC 7.2.0.

My teacher claims this:

int main(){
    int a; /* Valid */
    a = 1; /* An operation */
    int b; /* Invalid because an operation has already occurred */
    return 0;
}

I tried compiling with

gcc test.c -std=c89 -Wall -Wextra -pedantic

but it gives no error, not even a warning.

How can I verify (or prove wrong) that statement?


Solution

  • Compile with -pedantic-errors, like this:

    gcc test.c -std=c89 -Wall -Wextra -pedantic-errors

    and you should see this error (among the unused variable warnings):

    test.c:4:5: error: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
         int b;
         ^~~
    

    in GCC 7.20.

    PS: The comments are invalid too, I removed them before compiling.