使用-Wpedantic选项编译c++ 11:是否有一个选项可以只禁用关于未命名结构的警告



我想保留-Wpedantic所做的任何其他检查,但失去关于未命名结构error: ISO C++ prohibits anonymous structs [-Wpedantic]的警告。

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

union
{
  struct
  {
    float x, y, z, w;
  };
  struct
  {
    float r, g, b, a;
  };
  float v[4];
};

目前为止我发现了什么

我使用c++ 11和编译与-std=c++11标志。我读到C11支持这个特性,但是我还没有看到任何提到它在c++ 11中被支持。

我碰到提到-fms-extensions:

  • 关于C的SO问题

  • 在GCC文档中用于编译c++时标记的使用,没有给出很多细节

我尝试了这个标志,它似乎没有任何效果(不管-fms-extensions-Wpedantic之间的顺序排列)。

EDIT -更多细节

感谢这些评论,我发现了以下内容:

  • 关于未命名类/结构不完全符合标准的详细信息

  • 一个帖子,声称我的示例代码依赖于未定义的行为

我仍然想知道是否有一种方法可以启用这个gcc扩展(我知道的所有编译器都有)来禁用警告。或者-Wpedantic是全部还是没有?

您可以暂时禁用-Wpedantic,例如,如果您在某些包含文件中有旧代码:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#include "old_header.hpp"
#pragma GCC diagnostic pop

当然,您也可以在使用匿名结构来限制禁用pedantic的范围的任何场合这样做,但是当您这样做时,您也可以继续并修复代码本身:)

最新更新