ISO C90 forbids mixed declarations and code in C

后端 未结 6 1841
余生分开走
余生分开走 2020-11-29 02:13

I declared a variable in this way:

int i = 0;

I get the warning:

ISO C90 forbids mixed declarations and code

6条回答
  •  无人及你
    2020-11-29 02:57

    -Wdeclaration-after-statement minimal reproducible example

    main.c

    #!/usr/bin/env bash
    
    set -eux
    
    cat << EOF > main.c
    #include 
    
    int main(void) {
        puts("hello");
        int a = 1;
        printf("%d\n", a);
        return 0;
    }
    EOF
    

    Give warning:

    gcc -std=c89 -Wdeclaration-after-statement -Werror main.c
    gcc -std=c99 -Wdeclaration-after-statement -Werror main.c
    gcc -std=c89 -pedantic -Werror main.c
    

    Don't give warning:

    gcc -std=c89 -pedantic -Wno-declaration-after-statement -Werror main.c
    gcc -std=c89 -Wno-declaration-after-statement -Werror main.c
    gcc -std=c99 -pedantic -Werror main.c
    gcc -std=c89 -Wall -Wextra -Werror main.c
    # https://stackoverflow.com/questions/14737104/what-is-the-default-c-mode-for-the-current-gcc-especially-on-ubuntu/53063656#53063656
    gcc -pedantic -Werror main.c
    

    The warning:

    main.c: In function ‘main’:
    main.c:5:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
         int a = 1;
         ^~~
    

    Tested on Ubuntu 16.04, GCC 6.4.0.

提交回复
热议问题