【发布时间】:2015-08-01 18:03:38
【问题描述】:
我正在使用一些自动生成的代码,这些代码往往具有类似的行
void f(int16_t a)
{
if (a < INT32_MAX)
...
}
这显然会产生警告,例如:
warning: comparison is always true due to limited range of data type
我无法更改 GCC 命令行选项,我可以在自动生成的内容之前/之后添加代码,如下所示:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtype-limits"
#pragma GCC diagnostic ignored "-Wtautological-constant-out-of-range-compare"
#include "autogenerated.h"
#pragma GCC diagnostic pop
这在较新的 GCC 版本上运行良好,但我需要支持回 gcc-3.4.6。我可以处理丢失的#pragma GCC diagnostic push,但在以前的版本中,这个警告似乎与-Wextra 捆绑在一起。因此,我尝试将其全部禁用:
// GCC 4.6+ needed for push/pop
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic push
#endif
// Disable warnings about unknown pragmas in case some of the options
// aren't present in the current version
#pragma GCC diagnostic ignored "-Wpragmas"
// Disable the problematic warnings
#pragma GCC diagnostic ignored "-Wtautological-constant-out-of-range-compare"
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wtype-limits"
// Sometimes it is bundled in -Wextra without a specific one, so disable that too
#pragma GCC diagnostic ignored "-Wextra"
// Disable everything else as well!
#pragma GCC diagnostic ignored "-Wall"
#include "autogenerated.h"
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic pop
#else
#pragma GCC diagnostic warning "-Wtautological-constant-out-of-range-compare"
#pragma GCC diagnostic warning "-Wsign-compare"
#pragma GCC diagnostic warning "-Wtype-limits"
#pragma GCC diagnostic warning "-Wextra"
#pragma GCC diagnostic warning "-Wall"
#pragma GCC diagnostic warning "-Wpragmas"
#endif
我仍然收到该警告。
编辑
多看几眼后,似乎这是不可能的。 #pragma GCC diagnostic 已添加到 gcc-4.2.4 中,这些行被完全忽略。没有警告是因为-Wpragmas 也不存在于gcc-3.4.6 中。
我将不得不求助于更改/欺骗生成器以不创建可警告代码。
【问题讨论】:
-
阅读 gcc 手册建议
-w可能会满足您的需求。 -
Hrm.. 你知道如何在
#pragma diagnostic中使用-w吗?它只处理警告标志(以-W开头)并且只有ignored、warning和error的选项。我无法更改命令行(更改生成器的机会更大,但我真的不想这样做)。 -
1) 为什么不用使用最近的 gcc?自 3.x 版本以来,它们已经改进了很多 2) 为什么这些警告会给您带来问题?如果您正在编译其他人的代码,我看不出这是一个问题。
-
1) 不是我的决定。它目前有效,很快改变的可能性很小(这不是一个微不足道的改变)。 2a)因为
-Werror,2b)由于它的包含方式,我最终得到了数千个。
标签: c gcc compiler-warnings