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