GCC does not emit a warning when compiling [duplicate]

做~自己de王妃 提交于 2019-12-09 16:06:32

问题


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.


回答1:


Why is it like that?

First, I can also reproduce this inconsistent state with mingw32 gcc 4.8.1 on my machine.

While the diagnostic is not required (no constraint violation) by the C Standard, there is no reason gcc issues the diagnostic with -std=gnu11 and not with -std=c11.

Moreover with gcc 4.8.2 on Linux on my machine, the diagnostic appears with both -std=c11 and -std=gnu11.

So it looks like a bug in gcc (either in gcc 4.8.1 or in mingw32 gcc 4.8.1).




回答2:


Documentation for both GNU libc and C99 libc (page 315 of the pdf) explicitly says that the argument for %p conversion "must be of type void *".

The fact that the warning is not issued should be a particularity of what your compiler thinks about Cxx standards. A stock gcc 4.8.2 on Ubuntu 14.04 issues the warning for all the six standards mentioned in your post.



来源:https://stackoverflow.com/questions/27755356/gcc-does-not-emit-a-warning-when-compiling

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!