sha*_*oth 5 c c++ compiler-construction portability pragma
使用的代码有多便携#pragma optimize?大多数编译器是否支持它以及对此的支持有多完整#pragma?
Seb*_*ach 11
#pragma是编译人员添加非认可和非便携式语言扩展的认可和可移植的方式*.
基本上,你永远不会确定,并且至少有一个主要的C++编译器(g ++)不支持这个pragma.
*:
从C++标准(N3242):
16.6 Pragma指令[cpp.pragma]
表单的预处理指令
# pragmapp-tokens 选择新线导致实现以实现定义的方式运行.该行为可能导致转换失败或导致转换程序或生成的程序以不符合的方式运行.将忽略实现无法识别的任何编译指示.
根据C标准(委员会草案 - 2011年4月12日):
6.10.6 Pragma指令
语义
表单的预处理指令
# pragmapp-tokens 选择新线其中预处理令牌
STDC不会立即跟pragma在指令中(在任何宏替换之前)174)导致实现以实现定义的方式运行.该行为可能导致转换失败或导致转换程序或生成的程序以不符合的方式运行.任何pragma未被实现识别的内容都将被忽略.
这是一个例子:
int main () {
#pragma omp parallel for
for (int i=0; i<16; ++i) {}
}
Run Code Online (Sandbox Code Playgroud)
C和C++ OpenMP API的很大一部分是作为#pragmas 实现的.