国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > 编译器指令 以获得更好的体验。

# C 语言的预处理编译器指令 #pragma

编译器指令(#pragma)用于向编译器提供额外的信息或发出特殊的命令。格式为:

#pramga 指令

# 标准指令

C 语言标准定义了以下三个指令:

指令 标准 说明
#pragma STDC FENV_ACCESS arg C99 是(ON)否(OFF)访问或修改浮点环境
#pragma STDC FP_CONTRACT arg C99 是(ON)否(OFF)允许对浮点表达式进行收缩,忽略舍入误差和浮点异常
#pragma STDC CX_LIMITED_RANGE arg C99 是(ON)否(OFF)允许复数的乘法、除法和绝对值使用简化的数学公式

# 非标准指令

编译器指令(#pragma)允许编译器自定义指令,以下是被绝大多数现代编译器所支持的非标准指令。

# #pragma once

#pragma once 指令写在头文件中,用于避免头文件被重复包含;该头文件被多次包含时,仅解析一次,重复的包含指令被忽略。

使用标准指令实现避免头文件被重复包含的方法为:

#ifndef LIBRARY_FILENAME_H 
#define LIBRARY_FILENAME_H 

// 头文件内容

#endif /* LIBRARY_FILENAME_H */

# #pragma pack

#pragma pack 指令用于控制结构体(struct)和联合(union)类型的对齐方式。

#pragma pack(n)         // 设为 n(1, 2, 4, 8, 16...)字节对齐
#pragma pack()          // 设为默认的对齐方式,通常是自然对齐
#pragma pack(push)      // 保存当前的对齐方式
#pragma pack(push, n)   // 保存当前的对齐方式,并设为 n(1, 2, 4, 8, 16...)字节对齐
#pragma pack(pop)       // 恢复之前保存的对齐方式

# 推荐阅读

# 参考标准

  • C23 standard (ISO/IEC 9899:2024):

    • 6.10.6 Pragma directive (p: TBD)

    • 6.10.9 Pragma operator (p: TBD)

  • C17 standard (ISO/IEC 9899:2018):

    • 6.10.6 Pragma directive (p: 127)

    • 6.10.9 Pragma operator (p: 129)

  • C11 standard (ISO/IEC 9899:2011):

    • 6.10.6 Pragma directive (p: 174)

    • 6.10.9 Pragma operator (p: 178)

  • C99 standard (ISO/IEC 9899:1999):

    • 6.10.6 Pragma directive (p: 159)

    • 6.10.9 Pragma operator (p: 161-162)

  • C89/C90 standard (ISO/IEC 9899:1990):

    • 3.8.6 Pragma directive

本文 更新于: 2025-11-27 09:38:06 创建于: 2025-11-27 09:38:06