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

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:

[email protected]:~/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:

[email protected]:~/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选项后面,假设放在前面,仍然会有警告哦.编译器应该是以最后一个"有效"选项为准呀!

[email protected]:~/src/c_src$ gcc -Wall -Wno-trigraphs -std=c11 -O3 -g0 -s -o x x.c




以上是关于gcc或clang中消除特定警告的方法的主要内容,如果未能解决你的问题,请参考以下文章

clang消除警告

重建所有包含警告的模块

如何在 gcc/clang 中的错误和警告之间添加换行符/边框

GCC 和 Clang 未对未使用的异常变量发出警告

为啥 GCC 不能消除多个继承函数的歧义(但 clang 可以)? [复制]

可以跨 C 和 C++ 方法优化 gcc 或 clang 的 LTO