学校微网站模板下载,上海企业网站制作报价,有需要网站建设网站推广请找我,在线logo设计商标免费为了方便编程#xff0c;编译器一般为开发人员提供一些预处理命令#xff0c;使用#xff03;标识。我们常见的预处理命令如下。
头文件的包含:#include.定义一些宏#define件编译#xff1a;#xff03;if、#xff03;else、#xff03;endif。编译控制#xff1a;编译器一般为开发人员提供一些预处理命令使用标识。我们常见的预处理命令如下。
头文件的包含:#include.定义一些宏#define件编译if、else、endif。编译控制pragma。
编译器提供的这些预处理命令大大方便了程序的编写通过头文件包含可以实现模块化编程使用宏可以定义一个常量提高程序的可读性通过条件编译可以让代码兼容不同的处理器架构和平台以最大限度地复用公用代码。通过pragma预处理命令可以设定编译器的状态指示编译器完成一些特定的动作。
pragma pack([n])指示结构体和联合成员的对齐方式。pragma message(“string”)在编译信息输出窗口打印自己的文本信息.pragma warning有选择地改变编译器的警告信息行为。pragma once在头文件中添加这条指令可以防止头文件多次编译。
预处理过程其实就是在编译源程序之前先处理源文件中的各种预处理命令。编译器是不认识预处理指令的在编译之前不先把这些预处理命令处理掉编译器就会报错。预处理主要包括以下操作。
头文件展开将include包含的头文件内容展开到当前位置。宏展开展开所有的宏定义并删除define。条件编译根据宏定义条件选择要参与编译的分支代码其余的分支丢弃。删除注释。添加行号和文件名标识编译过程中根据需要可以显示这些信息。保留pragma命令该命令会在程序编译时指示编译器执行一些特定行为。
一个源程序在预处理前后有什么变化呢我们写了一个测试程序分别使用预处理命令去定义一些宏和条件编译。
// example.c
#include stdio.h#define MAX 100int main() {int numbers[MAX];for (int i 0; i MAX; i) {numbers[i] i;}#ifdef DEBUGfor (int i 0; i MAX; i) {printf(%d\n, numbers[i]);}#endifreturn 0;
}gcc -E example.c example.i
cat example.i自己可示例分析 查看example.i 文件.
通过预处理前后源文件的变化对比不难发现:当预处理器遇到include命令时会直接将包含的头文件内容展开并删除include当遇到define宏时执行同样的操作。当遇到条件编译指令时会根据开发者定义的宏标记选择要参与编译的代码部分其余部分删除经过预处理后pragma保留指示编译器在后续的编译阶段执行一些特定的操作。继续编译预处理后的C程序在编译信息提示窗口里我们会看到自己添加的编译提示信息。