一些C++编译器允许匿名联合和结构作为标准C++的扩展.这有点语法糖,偶尔会非常有帮助.
阻止它成为标准一部分的理由是什么?是否存在技术障碍?一个哲学的?或者仅仅是不足以证明它的合理性?
这是我正在谈论的样本:
struct vector3 {
union {
struct {
float x;
float y;
float z;
};
float v[3];
};
};
Run Code Online (Sandbox Code Playgroud)
我的编译器会接受这个,但它警告"无名结构/联合"是C++的非标准扩展.
我想禁用语言扩展,以便能够在我的项目中进行一些测试.我发现我必须从http://msdn.microsoft.com/en-us/library/0k0w269d.aspx设置/ Za编译器指令,但是在此之后如果我包含windows头文件我会有错误.有没有办法在VS2010中编写符合标准的代码(由编译器强制执行,而不是由其他程序员/代码审查强制执行),仍然使用系统头文件?
谢谢!
我在Visual Studio工作,但我的项目是基于POSIX的环境(marmalade sdk).在这个项目中,发布版本使用gcc编译为ARM,但调试版本在Windows上运行,由MS编译器编译.此环境也有自己的STL和其他标准库的实现.
许多这些c ++ librares都有这样的代码:
#if defined( _MSC_VER )
#include <Windows.h>
#else
#include <pthread.h>
#endif
Run Code Online (Sandbox Code Playgroud)
是否可以取消定义_MSC_VER宏? - 这样C++库就可以在这里检测到POSIX系统.