Se sei sicuro di avere a che fare con sorgenti C, e non C++, è altamente probabile che il compilatore segua lo standard C89, dal momento che prima del C99 era obbligatorio dichiarare tutte le variabili all'inizio delle funzioni, prima di qualsiasi operazione.
Esempio con Clang ed opzione -ansi (C89)
username@host:~$ cat test.c
#include <stdio.h>
void test()
{
printf("Hello World!\n");
int x = 1;
}
username@host:~$ clang -Werror -Weverything -ansi -pedantic test.c
test.c:5:6: error: ISO C90 forbids mixing declarations and code
[-Werror,-Wdeclaration-after-statement]
int x = 1;
^
test.c:5:6: error: unused variable 'x' [-Werror,-Wunused-variable]
test.c:2:6: error: no previous prototype for function 'test'
[-Werror,-Wmissing-prototypes]
void test()
^
3 errors generated.
C99
username@host:~$ cat test.c
#include <stdio.h>
void test()
{
printf("Hello World!\n");
int x = 1;
}
username@host:~$ clang -Werror -Weverything -std=c99 -pedantic test.c
test.c:5:6: error: unused variable 'x' [-Werror,-Wunused-variable]
int x = 1;
^
test.c:2:6: error: no previous prototype for function 'test'
[-Werror,-Wmissing-prototypes]
void test()
^
2 errors generated.