g使用-Wpedantic选项编译C 11:是否有一个选项可以仅禁用有关未命名结构的警告?

前端之家收集整理的这篇文章主要介绍了g使用-Wpedantic选项编译C 11:是否有一个选项可以仅禁用有关未命名结构的警告?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想保留任何其他检查–Wableantic但会丢失关于未命名的结构错误的警告:ISO C禁止匿名结构[-Wpedantic].

我希望能够做到以下几点:

union
{
  struct
  {
    float x,y,z,w;
  };
  struct
  {
    float r,g,b,a;
  };

  float v[4];
};

到目前为止我发现了什么

我正在使用C 11并使用-std = c 11标志进行编译.我已经read that C11 supports this feature了,但我还没有看到它在C 11中得到支持.

我遇到过-fms-extensions的提及:

> In this SO question about C for which it is the accepted answer
> In the GCC documentation for the flag’s use when compiling C++ which doesn’t give very many details

我尝试了标志,它似乎没有任何影响(无论-fms-extensions和-Wpedantic之间的排序排列).

编辑 – 更多细节

感谢我的评论,我发现了以下内容

> Details about why unnamed classes/structs are not fully conformant with the standard
> A post that claims my example code relies on undefined behavior

我还是想知道是否有一种启用此gcc扩展(我知道所有编译器都有)的方法将禁用该警告.或者是–Wableantic全有或全无?

解决方法

您可以暂时禁用-Wpedantic,例如,如果您在某个包含文件中有旧代码
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#include "old_header.hpp"
#pragma GCC diagnostic pop

当然你也可以在你使用匿名结构来限制禁用迂腐的范围的每个场合都这样做,但是当你这样做时你也可以继续修复代码本身:)

猜你在找的C&C++相关文章