gcc或clang中消除特定警告的方法

    一般在编译代码时会有相当多的警告信息,尤其当我们使用了-Wall选项的时候.-Wall绝不是像其字面意思一样打开全部警告.只是它打开的警告也相当多了.对于一些我们已知"无害"但仍然打印出来挤占可怜的控制台空间的警告,我们当然能够将其"屏蔽"掉.

    就拿下面代码来说:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>

int main(void)
{
	long double ld = 10000.2222L;
	puts("hello world!?

??

(y/n)"); printf("long double type size is %lu %lu\n",sizeof(long double),sizeof ld); return 0; }

其会生成一个所谓的"三字符组符号"使用的警告,如果这正是我们须要的效果,所以我们能够忽略该警告.我们编译一下看看先(不管用gcc还是clang):

gcc:

wisy@wisy-ThinkPad-X61:~/src/c_src$ gcc -Wall -std=c11 -O3 -g0 -s -o x x.c
x.c: In function ‘main’:
x.c:9:21: warning: trigraph ??( converted to [ [-Wtrigraphs]
  puts("hello world!???(y/n)");
 ^

clang:

wisy@wisy-ThinkPad-X61:~/src/c_src$ clang -Wall -std=c11 -O3 -g0 -s -o x x.c
x.c:9:21: warning: trigraph converted to '[' character [-Wtrigraphs]
        puts("hello world!???

(y/n)"); ^ 1 warning generated.

只是在去掉-Wall警告后,能够发现没有不论什么警告,一切都安静了.但这不是我们想要的,由于可能放过一些真正隐含错误类的警告.大家能够看到警告提示中写明了该警告的类型:-Wtrigraphs.我们仅仅要加上在W后面加上no就可以屏蔽该警告,只是要放在Wall选项后面,假设放在前面,仍然会有警告哦.编译器应该是以最后一个"有效"选项为准呀!

wisy@wisy-ThinkPad-X61:~/src/c_src$ gcc -Wall -Wno-trigraphs -std=c11 -O3 -g0 -s -o x x.c




posted on 2017-07-15 10:48  ljbguanli  阅读(575)  评论(0编辑  收藏  举报