- 头文件包含:
#include
- 定义一个宏:
#define
- 条件编译:
#if
、#else
、#endif
- 编译控制:
#pragma
编译器提供的这些预处理命令,大大方便了程序的编写:通过头文件包含可以实现模块化编程;使用宏可以定义一个常量,提高程序的可读性;通过条件编译可以让代码兼容不同的处理器架构和平台,以最大限度地复用公用代码。通过 #pragma
预处理命令可以设定编译器的状态,指示编译器完成一些特定的动作。
#pragma pack([n])
:指示结构体和联合成员的对齐方式。#pragma message("string")
:在编译信息输出窗口打印自己的文本信息。#pragma warning
:有选择地改变编译器的警告信息行为。#pragma once
:在头文件中添加这条指令,可以防止头文件多次编译。
预处理过程,其实就是在编译源程序之前,先处理源文件中的各种预处理命令。编译器是不认识这些预处理指令的,在编译之前需要先把这些预处理命令处理掉。预处理主要包括以下操作:
- 头文件展开:将
#include
包含的头文件内容展开到当前位置。 - 宏展开:展开所有的宏定义,并删除
#define
。 - 条件编译:根据宏定义条件,选择要参与编译的分支代码,其余的分支丢弃。
- 删除注释。
- 添加行号和文件名标识:编译过程中根据需要可以显示这些信息。
- 保留
#pragma
命令:该命令会在程序编译时指示编译器执行一些特定行为。
使用如下命令仅执行预处理过程:arm-linux-gnueabi-gcc -E main.c > main.i