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
时间: 2024-10-05 05:41:31

gcc或clang中消除特定警告的方法的相关文章

OSG中找到特定节点的方法(转)

OSG中找到特定节点的方法 为了在OSG中找到需要的节点并对节点做出相应的操作,可以从NodeVisitor类中继承一个类,NPS的教程 [download id="14"] 阐述了这个问题.下面是我写的一个类,找到指定名字.指定类型的节点: class findGeoNamedNode: public osg::NodeVisitor { public: findGeoNamedNode(); findGeoNamedNode(const std::string name): osg

OSG中找到特定节点的方法

OSG中找到特定节点的方法 转自:http://38288890.blog.163.com/blog/static/19612845320072721549504/ 为了在OSG中找到需要的节点并对节点做出相应的操作,可以从NodeVisitor类中继承一个类,NPS的教程 [download id="14"]阐述了这个问题.下面是我写的一个类,找到指定名字.指定类型的节点:class findGeoNamedNode:public osg::NodeVisitor{public:fi

msvc/gcc:中用#pragma指令关闭特定警告(warning)

在使用一些第三方库或源码的时候,经常会遇到编译时产生warnings情况,这些warning不是我们自己的代码产生的,当然也不好去修改,但每次编译都显示一大堆与自己代码无关的警告也着实看着不爽,更麻烦的是还有可能造成自己代码中产生的警告被淹没在多过的无关警告中,而被忽略掉的情况. 所以要想办法关闭这些第三方代码和库产生的警告. 关闭特定的warning可以在编译时通过命令行参数的方式指定,比如 gcc 是在命令行一般是用-Wno-xxxx这样的形式禁止特定的warning,这里xxxx代入特定的

编译器GCC与Clang的异同

GCC:GNU(Gnu's Not Unix)编译器套装(GNU Compiler Collection,GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分,也是GNU工具链的主要组成部分之一.GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准.1985年由理查德·马修·斯托曼开始发展,现在由自由软件基金会负责维护工作.GCC原本用C开发,后来因为LLVM.Clang的崛起,它更快地将开发语言转换为C++. GCC支持的语言:原名

【翻译自mos文章】升级到11.2.0.4之后在alert日志中出现 NUMA 警告信息

注:与本文有关的文章为:http://blog.csdn.net/msdnchina/article/details/43763927 升级到11.2.0.4之后在alert日志中出现 NUMA 警告信息 翻译自mos文章:NUMA warning message appear after upgrade to 11.2.0.4 (文档 ID 1600824.1)1 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.4 and

mysql中,ENCODE警告---Warning Code : 1287

mysql中,ENCODE警告 共 1 行受到影响, 1 个警告 执行耗时 : 0.072 sec传送时间 : 0.001 sec总耗时 : 0.073 sec Warning Code : 1287'ENCODE' is deprecated and will be removed in a future release. Please use AES_ENCRYPT instead

在字符串中删除特定字符

63.在字符串中删除特定的字符.题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”. 思路: 1. 位图法 将两个字符串分别转换成bitmap 然后对他们做异或xor运算,得到的结果即为排除了第二个字符串的所有字符, 然后对该结果依次与原字符串的所有字符进行与运算,结果不为零的即为所得    恩 位图真是个好东西啊...时间复杂度o(n+m) 花在了遍历

清除数组中的特定数值

题目:清除数组中的undefined 解决方案1: var ccc = [1,2,3,undefined,undefined,undefined,undefined,4,5,6] for(var i = 0;i<ccc.length;i++){ if(typeof ccc[i] == "undefined"){ ccc.splice(i,1) } } console.log(ccc) 解决方案2: var ccc = [1,2,3,undefined,undefined,unde

删除list中的特定元素

对于动态删除list中的特定元素,一般用linkedList,删除时有以下两种方法. 1. 循环遍历,找到要删除的元素后删除并且减少list长度.如果不减少list长度,那么就仅仅删除了元素,但没改变循环的判定条件(list.size),就会出现数组越界. for(int i = 0, len = list.size(); i < len; i++){ if(list.get(i) == 1){ list.remove(i); len--; i--; } } 2. List接口内部实现了Iter