我想保留-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标志进行编译。我有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扩展(我所知道的所有编译器都具有)的方法,该方法将禁用警告。还是-Wpedantic全部还是全部?

    最佳答案

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

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

    当然,您也可以在每次使用匿名结构来限制pedantic禁用范围的情况下执行此操作,但是在执行此操作时,也可以继续进行操作,并自行修复代码:)

    07-27 19:26