在C语言编程过程中,经常使用诸如#include,#define之类的指令。
这些符号开头的指令称为预处理指令,这些预处理指令由预处理器(预处理器)操作。
与其他编程语言相比,C / C ++语言更依赖于预处理程序,因此在读取或开发C / C ++程序的过程中,您可能会遇到大量预处理指令。
1预处理指令和分类C / C ++程序中的源代码包含各种以#开头的编译指令。
这些指令称为预处理指令。
预处理指令不属于C / C ++语言的语法,但是在某种意义上,可以说预处理扩展了C / C ++。
ANSI C定义的预处理指令主要包括四种类型:文件包含,宏定义,条件编译和特殊控制。
1.文件包含文件包含:#include是C编程中最常用的预处理指令。
例如,几乎每个需要输入和输出的C程序都必须包含#include指令,这意味着用此行指令替换stdio.h文件中的整个内容。
包含文件的格式为#include,后跟尖括号和双引号“”。
两者之间的主要区别是搜索路径。
尖括号形式:例如#include,预处理器直接在系统目录中的相应文件中搜索math.h文件,如果搜索失败,则报告错误。
系统提供的头文件通常采用这种包含方法,而自定义头文件则不能采用这种方法。
用双引号引起来:例如#include“ cal.h”,首先在当前工作目录中搜索文件(如果找不到),然后在系统目录中搜索。
包含自定义头文件,通常使用此方法。
尽管此方法对于系统头文件是正确的,但它浪费了不必要的搜索时间。
因此,不建议系统头文件使用此方法。
2.宏定义宏定义:包括定义宏#define和删除宏#undef。
从#define开始,您可以定义不带参数的宏定义和带参数的宏。
程序通常使用无参数宏定义来定义符号常量。
例如:#define PI 3.1416 //定义无符号宏,或定义符号常量PI #undef表示删除已定义的宏,例如:#undef PI //删除前一个宏的定义3.条件编译条件编译:主要用于有选择地执行相应的操作,以防止重复包含宏替换内容(例如文件等)。
常见的条件编译指令是#if,#elif,#else,#endif,#ifdef和#ifndef。
4.特殊控件特殊控件:ANSI C还定义了特殊的预处理指令,例如#error,#pragma。
#error:使预处理器输出指定的错误消息,通常用于调试程序。
#pragma:这是一种更加通用和灵活的指令,可以具有不同的参数选择来完成相应的特定功能操作。
调用格式为:#pragma参数。
其中,参数可以包括消息类型,code_seg,一次,警告,打包等。
以下预处理指令通常用于将内存设置为与n个字节对齐。
#pragma pack(n)//其中n称为对齐因子,取1,2,4,4,8 ... 2个预处理器及其工作原理C预处理器(C Pre-Processor)经常缩写为CPP,这是一个独立于C编译器的小型程序。
预编译器不了解C语言语法。
它仅在编译程序源文件之前实现文本替换功能。
目前,预编译器已集成到集成开发环境中。
通常,没有选项可以执行预处理操作。
它包含在编译操作中。
即,在选择了编辑操作时,预处理器首先被调用来处理该预处理的指令,所述预处理器的输出,然后被发送到编译器,编译器检查该程序是否是从C语言的语法的角度正确,如果正确,它将生成目标代码文件或机器指令文件。
C预处理程序和C编译器的执行顺序以及输入和输出文件类型如下图所示:来源:http://c.biancheng.net/view/286.html免责声明:本文内容在引用后发布经21ic授权,版权归原作者所有。
该平台仅提供信息存储服务。
本文仅代表作者的个人观点,不代表本人的立场。