C语言预处理详细过程

C语言预处理的详细步骤

C语言预处理是编译过程中的第一步,它主要负责处理源代码中的预处理指令,这些指令以#开头。预处理的目的是准备代码以便进行语法分析和编译。预处理的主要步骤包括:

1.字符映射和逻辑行形成:将源代码中的字符映射到源字符集中,并将多个物理行通过连续的反斜杠(\)合并成单个逻辑行。

2.注释去除:编译器将所有注释(单行和多行)替换为单个空格。

3.预处理记号划分:将逻辑行划分成预处理记号(Token)和空白字符。

4.宏展开:执行宏定义中的替换,处理#define指令,以及处理#include指令,即将包含的文件内容插入到预处理指令的位置。

5.转义序列替换:识别并替换字符常量或字符串中的转义序列。

6.字符串连接:连接相邻的字符串字面量。

7.丢弃空白字符:预处理后,丢弃所有不必要的空白字符,如空格、制表符等。

8.条件编译:根据条件编译指令(如#ifdef, #ifndef, #if等)决定是否编译程序的某些部分。

9.预定义宏处理:处理编译器提供的预定义宏,如__FILE__, LINE, DATE, __TIME__等。

10.添加行号和文件名标识:为预处理后的代码添加行号和文件名信息,方便后续的错误报告和调试。

11.保留编译器指令:保留所有的#pragma指令,编译器后续会使用这些指令。

预处理的结果是一个没有预处理指令、注释和多余空白字符的文本文件,这个文件随后由编译器进行词法分析、语法分析和代码生成等编译步骤.

相关推荐
啊?啊?5 分钟前
14 C++ STL 容器实战:stack/list 模拟实现指南 + priority_queue 用法及避坑技巧
c++·
汉克老师13 分钟前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(4、最大空白区)
c++·算法·蓝桥杯·蓝桥杯c++·c++蓝桥杯
羚羊角uou1 小时前
【Linux】匿名管道和进程池
linux·c++·算法
曙曙学编程1 小时前
stm32——独立看门狗,RTC
c语言·c++·stm32·单片机·嵌入式硬件
励志不掉头发的内向程序员1 小时前
C++进阶——多态
开发语言·c++·学习
楼田莉子2 小时前
C++算法专题学习:栈相关的算法
开发语言·c++·算法·leetcode
晨非辰2 小时前
#C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
c语言·开发语言·经验分享·学习方法·visual studio
dragoooon342 小时前
[数据结构——lesson3.单链表]
数据结构·c++·leetcode·学习方法
Suresoft China2 小时前
软件测试|STATIC 代码静态验证工具 C/C++ 工具链设置指南
c++·单元测试·静态测试·测试覆盖率·static·代码覆盖率·工具链设置
陈序猿(代码自用版)3 小时前
【考研C语言编程题】数组元素批量插入实现(含图示+三部曲拆解)
c语言·开发语言·考研