The following code compiles and runs but I expect a warning when compiling:
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x = 10;
printf("%p\n",&x);
return EXIT_SUCCESS;
}
GCC,from an online compiler with command line argument
-Wall -std=gnu99 -O2 -o a.out source_file.c -pedantic -Wextra
gives out the following warning when compiling
source_file.c: In function ‘main’:
source_file.c:7:3: warning: format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%p\n",&x);
because I've not added a (void*)
cast before &x
as %p
expects an argument of type void*
.But when I compile using
gcc SO.c -o so -Wall -Wextra -pedantic -std=c11
or
gcc SO.c -o so -Wall -Wextra -pedantic -std=c99
or
gcc SO.c -o so -Wall -Wextra -pedantic -std=c89
GCC(in my PC) does not give out a warning whereas compiling(again in my PC) using
gcc SO.c -o so -Wall -Wextra -pedantic -std=gnu11
or
gcc SO.c -o so -Wall -Wextra -pedantic -std=gnu99
or
gcc SO.c -o so -Wall -Wextra -pedantic -std=gnu89
or
gcc SO.c -o so -Wall -Wextra -pedantic
I get the warning mentioned above. Why is it like that? My GCC version is 4.8.1 and I'm using Windows. I compile from the console,i.e, cmd
.