我想保留-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
的范围的任何场合这样做,但是当您这样做时,您也可以继续并修复代码本身:)