干货! C语言预处理命令分类及工作原理

在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授权,版权归原作者所有。

该平台仅提供信息存储服务。

本文仅代表作者的个人观点,不代表本人的立场。

联系方式

KAMAYA(日本釜屋电机株式会社)成立于1957年10月15日,总部在日本的北海道,是一家国际知名的电子元件生产商,同其他日系企业一样,KAMAYA特别注重品质和客户的服务,在全世界范围内都设有工厂和分部。华科(华新科技股份有限公司)收购但独立运营。

查看详情

在线咨询