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