我被告知要避免使用像这样的C ++功能,因为它很难将代码移植到其他编译器。
我给出的示例是在我的标头文件中使用#ifdef
而不是#pragma once
。
答案 0 :(得分:3)
嗯,这很难回答,因为每个编译器都不同 - 更具体地说,#pragma语句不是C ++的一个特性。 #pragma的定义是“发送给编译器的命令”:
“Pragma根据定义是特定于机器或操作系统的,并且对于每个编译器通常都是不同的。” MSDN
所以,基本上,只要你看到#pragma,就意味着“接下来的内容不是语言标准的一部分,因此对于你定位/编译的每个平台都可能有所不同”
答案 1 :(得分:3)
这些不是“C ++特性”,它们是非标准的“扩展”,非标准函数,以及编译器开发人员提供的“编译器特性”。
在移植过程中会导致问题的微软特定功能的简短列表:
答案 2 :(得分:1)
以下是VC ++中非标准行为的列表:http://msdn.microsoft.com/en-us/library/x84h5b78%28VS.71%29.aspx
答案 3 :(得分:0)
每个语句中非常干净但不可移植的:Visual c++ "for each" portability