如何在编译C代码时禁用警告?

如何在编译C代码时禁用警告?,c,gcc,C,Gcc,我正在开发32位Fedora14系统。我正在使用gcc编译源代码 有人知道如何在编译c代码时禁用警告吗 编辑:是的,我知道。最好的办法是修复这些警告,以避免任何未定义/未知的行为。但目前在这里,我第一次编写了大量代码,在第一次编译中有很多错误和警告。在这里,我只想先关注错误,然后再看到警告。在编译时尝试添加-w选项 每个主体都告诉您使用gcc使用-Wall开关,但您想禁用它。不建议使用调试器查找它 莱纳斯·托瓦尔兹: “但这显然是唯一正确的方法。其他人以其他方式这样做的事实只意味着他们错了。”

我正在开发32位Fedora14系统。我正在使用
gcc
编译源代码

有人知道如何在编译c代码时禁用警告吗



编辑:是的,我知道。最好的办法是修复这些警告,以避免任何未定义/未知的行为。但目前在这里,我第一次编写了大量代码,在第一次编译中有很多错误和警告。在这里,我只想先关注错误,然后再看到警告。

在编译时尝试添加-w选项


每个主体都告诉您使用gcc使用
-Wall
开关,但您想禁用它。不建议使用调试器查找它

莱纳斯·托瓦尔兹:

“但这显然是唯一正确的方法。其他人以其他方式这样做的事实只意味着他们错了。”


最好是找出问题所在。它将防止您在将来查找错误,如果您修复了实际的错误,则不会发生错误

但是,如果您确定没有bug,或者您已经确定问题已被代码捕获,请将其放在文件中的某个位置(其中177是您的警告编号):


在我学习编程时,我们被告知编译器警告表示严重的编程错误,而编译器错误通常只指向缺少的头、分号、拼写错误等。不要禁用警告!解决他们的原因!这只是部分正确。一些gcc警告将最佳实践标记为警告,并鼓励您编写不完整的、不可移植的代码。我能想到的最好的例子是
mbstate\u t state={0}的大括号警告
鼓励人们使用
memset(&state,0,sizeof state)取而代之。后者可能有效,但它不是严格可移植的。@chux:因为C标准需要一个零初始化的
mbstate\u t
对象,并且该类型的定义是不透明的。如果它有任何浮点或指针成员,则全零位表示不需要产生所需的零值。@chux:
(mbstate\u t){0}
是一个零值
mbstate\u t
memset
的结果是“零表示”。它是否也是零值的取决于具体的实现。一个实现可能还允许
mbstate\u t
非零值的对象来表示初始转换状态,但这也是特定于实现的,因此不可移植,这就是我的全部观点。这将禁用所有我认为不是好主意的警告。@celavek:我也不这样认为。警告有其作用。操作:最好阅读它们,并相应地更改代码以使它们消失。我不会删除
-Wall
,但是在
-Wall
之后,您想添加一些
-Wno-*
选项来禁用一些讨厌的和误报的警告。这看起来不像是对问题的回答,看起来像是试图发表评论。如果OP想要禁用警告,请告诉他如何禁用警告。然后,如果你是一个好人,你可以建议这不是一个好的做法。我在
gcc
clang
中尝试了这个方法,但似乎不起作用。
#pragma diag_suppress 177 // supress #177-D function  was declared but never referenced