#pragma
这个预处理指令可以控制一些实现定义的行为。
标准行为
在下面这三种用法中,arg
是 ON
和 OFF
和 DEFAULT
三者之一。
#pragma STDC FENV_ACCESS
arg
如果这个宏被设置为 ON
,会告知编译器:这个程序会访问或者修改浮点环境。这可能导致某些和浮点数相关的编译器优化被禁用。
默认值由实现定义,一般为 OFF
。
#pragma STDC FP_CONTRACT
arg
#pragma STDC CX_LIMITED_RANGE
arg
非标准行为
以下两个 #pragma
的用法不是标准里面规定的,但是受到了普遍支持。
#pragma once
这个指令受到绝大多数现代编译器的支持,可以看作事实标准。
如果它出现在头文件中,表示这个头文件无论在同一个源文件中被包含多少次,都只应该被解析一次,
#pragma pack
这个指令控制后续定义的结构体和联合体成员的最大对齐。