在Visual C++中,可以使用#pragma warning (disable: ...).我还发现在GCC中你可以覆盖每个文件的编译器标志.我怎样才能为"下一行"做这个,或者使用GCC围绕代码区域推送/弹出语义?
我想对特定包含文件直接或间接包含的所有文件禁用特定警告.例如,我想禁用警告"你正在为字符串文字指定一个字符串文字*",包括a所包含的文件所包含的所有文件或文件#include <bar/*>(在我的情况下,明星意味着"任何东西可能在这里").
原因是,我必须编程的一些人不能使用"const",所以最后我得到很多关于特定字符串文字滥用的警告.我想忽略来自他们代码的成千上万的警告,所以我可以专注于我自己的代码中的错误并修复它们.
我使用的是英特尔C++和GCC.我的一些伙伴使用clang,所以我很乐意听到解决方案.
在Microsoft编译器上,可以使用#pragma禁用特定警告,而不禁用其他警告.如果编译器警告"必须完成"的事情,这是一个非常有用的功能.
GCC此时是否有类似功能?这似乎是一个显而易见的功能,它无法想象它还没有这个功能,但网上的旧信息表明这个功能不存在.
在GCC中使用什么?
具体来说,我喜欢使用多字符常量,比如'abc'.这些有效地评估为基数256 - 这是一个非常方便的功能,但它会触发警告.它非常便于在case语句中切换四个字符串.
我在堆栈变量上收到此警告:
warning: object.member may be used uninitialized in this function
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我不希望强制初始化只是为了消除警告,因为它消耗CPU周期.变量是POD结构,所以memset它不是零成本.我可以验证变量从未使用过未初始化,所以我只想禁止它的警告.
一般来说,我确实需要警告,而不是在这个特定情况下的特定变量.我怎么能抑制警告?
看起来pragma诊断是正确的方法,但它们需要相当新版本的GCC(4.6)
在该版本之前,没有可接受的解决方案.
我试图gcc关闭我对二进制常量的使用.它们使代码更具可读性,但阻止我使用-pedantic我遵守的代码.我想要有一个类似-fnobinaryconstwarn或类似的开关(我认为在阅读手册页一段时间后我认为不存在)或使用
#pragma GCC diagnostic ignored "-pedantic"
Run Code Online (Sandbox Code Playgroud)
选择性地禁用如此处所述的短暂伸展的迂腐警告:有 选择地仅对部分翻译单元禁用GCC警告? 不幸的是,这似乎不起作用.我有什么选择?
对于 clang
#pragma GCC diagnostic ignored "-Wpedantic"
Run Code Online (Sandbox Code Playgroud)
虽然上面的行没有,但它会产生错误gcc.
有可能把东西放在C源文件的顶部,比如
// GCC_OPTIONS=-g,-Wall
Run Code Online (Sandbox Code Playgroud)
每次编译此文件时,这些选项会自动添加到gcc吗?
我正在使用C++,Mac OS X,Qt和使用boost库构建应用程序.每次我构建一个项目时,我只会从boost库本身获得一个巨大的警告列表.
如何关闭它们,以便我只能看到我的项目特定警告和错误?
我工作的一个项目有一个不强制执行警告的构建系统.
但我有一些代码需要警告才能工作.这是一个例子
NSString* title = @"";
if ([view respondsToSelector:@selector(title)]) {
title = [view title];
}
Run Code Online (Sandbox Code Playgroud)
在一些谷歌搜索之后,我尝试通过包装该代码区来禁用代码块的警告
#pragma warning disable
// my code
#pragma warning restore
Run Code Online (Sandbox Code Playgroud)
没工作:(
有人知道如何在Xcode中执行此操作吗?
任何帮助表示赞赏.
-简历
我想知道是否有办法禁用特定文件上的所有警告(例如,使用预处理器指令).
我正在使用CImg.h,我想摆脱涉及该代码的警告.
我正在使用VS(Windows版本)和gcc(Linux版本)进行编译,所以我希望有一个通用的方法......
谢谢!
我想在构建选项中启用-Wfloat-equal(这是一个GCC标志,当通过==或!=运算符比较两个浮点数时会发出警告)。但是,在我使用的库的几个头文件中,以及我自己的代码的很大一部分中,我经常想使用float或double的非零值进行分支,使用if (x)或if (x != 0)或它们的变体。
由于在这些情况下,我绝对可以确定该值完全为零-检查的值是显式零初始化的结果calloc,等等。-我看不出使用此比较的不利之处,而是成本更高且可读性更差调用我的near(x, 0)函数。
是否有某种方法可以-Wfloat-equal对所有其他种类的浮点相等比较产生影响,但允许这些传递不加标记?库头文件中有足够多的实例,它们可以严重污染我的警告输出。