为什么GCC的诊断实用工具因某些警告类型而失败?

时间:2015-02-12 22:25:18

标签: c pragma gcc-warning

我注意到GCC的诊断实用程序只支持一些警告。

这有效:

#pragma GCC diagnostic error "-Wconversion"

这失败了:

#pragma GCC diagnostic error "-Wframe-larger-than=32"

...错误:

error: unknown option after '#pragma GCC diagnostic' kind [-Werror=pragmas]
#pragma GCC diagnostic error "-Wframe-larger-than"

..当作为命令行参数传递时,这两个参数都适用于GCC。


是否有GCC diagnostic pragma支持警告的文档?

2 个答案:

答案 0 :(得分:3)

我怀疑你在GCC中发现了这个特定选项的错误。

使用以下基本示例(参见 live ):

#include <stdio.h>

int main(void)
{
    int i = 4;

    printf("%d\n", i);

    return 0;
}
-Wframe-larger-than=2编译的

显然有一条警告信息:

  

警告:16字节的帧大小大于2个字节   [-Wframe-较大比=]

然而,-Werror=的组合(即完整标志为-Werror=frame-larger-than=2),它表现得很奇怪:

  

错误:16字节的帧大小大于1个字节   [-Werror =帧较大比=]

更奇怪的是,它看起来值完全被忽略,因为-Werror=frame-larger-than=64仍会产生相同的错误,尽管满足阈值(即16 <64)

(旁注:GCC版本为4.9.0)

我认为-Werror=选项处理与#pragma GCC diagnostic error有某种联系,因为以下似乎有效:

#include <stdio.h>

#pragma GCC diagnostic error "-Wframe-larger-than="
int main(void)
{
    int i = 4;

    printf("%d\n", i);

    return 0;
}

返回错误:

  

错误:16字节的帧大小大于1个字节   [-Werror =帧较大比=]

但它没有配合任何价值,例如:

#pragma GCC diagnostic error "-Wframe-larger-than=2"

产生

  

警告:'#pragma GCC diagnostic'之后的未知选项   [-Wpragmas]

答案 1 :(得分:3)

这是我发现的最好的事情:
GCC手册this

  

pragma GCC诊断类选项:
  修改诊断的处置。请注意,并非所有诊断都可以修改;目前只有警告(通常由'-W ......'控制)可以控制,而不是所有警告。使用-fdiagnostics-show-option确定哪些诊断可控,哪个选项控制它们。

this的GCC手册:

  

现在,只有C ++前端可以尊重这些选项   ....
   -fdiagnostics出现选项:
  此选项指示诊断机器向每个发出的诊断添加文本,这表示当诊断机构知道此选项时,哪个命令行选项直接控制该诊断。