以下代码可以编译并运行,但是我希望在编译时能够得到警告信息:
在编译时会发出以下警告。
因为在
#include <stdio.h>
#include <stdlib.h>
int main(void){
int x = 10;
printf("%p\n",&x);
return EXIT_SUCCESS;
}
使用在线编译器GCC,带有命令行参数
-Wall -std=gnu99 -O2 -o a.out source_file.c -pedantic -Wextra
在编译时会发出以下警告。
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);
因为在
%p
之前我没有添加(void*)
强制转换,因为%p
需要一个void*
类型的参数作为输入。但是当我使用编译器进行编译时,出现了错误。gcc SO.c -o so -Wall -Wextra -pedantic -std=c11
或者
gcc SO.c -o so -Wall -Wextra -pedantic -std=c99
或者
gcc SO.c -o so -Wall -Wextra -pedantic -std=c89
在我的电脑上使用GCC编译时,它没有发出警告。但是,在同一台电脑上使用其他编译器进行编译时却有警告。
gcc SO.c -o so -Wall -Wextra -pedantic -std=gnu11
或者
gcc SO.c -o so -Wall -Wextra -pedantic -std=gnu99
或者
gcc SO.c -o so -Wall -Wextra -pedantic -std=gnu89
或者
gcc SO.c -o so -Wall -Wextra -pedantic
我收到了上述警告,为什么会这样?我的GCC版本是4.8.1,我正在使用Windows操作系统。我是通过控制台编译的,也就是说,我是用cmd
命令行工具编译的。
gcc -v
命令显示的是Target: mingw32
。所以我猜测它是mingw gcc。 - Spikatrix