跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
模压电感捷比信 · 专业器件主题站

C语言预处理指令和分类

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