C语言学习12:预处理器
C 预处理器
预处理器 不是
编译器的组成部分,是编译过程的一个单独的步骤。简言之,C预处理器是一个 文本替换工具
,它会指示编译器在实际编译前完成所需的 预处理
;我们把 C 预处理器(C Preprocessor) 简写成(CPP)
所有的预处理器都是以 #
开头,非空字符,为增加可读性,从第一列开始,下面列出了所有的预处理命令:
预处理实例
#define MAX_LENGTH 20
这个指令告诉 CPP
把所有的 MAX_LENGTH
定义为 20
,使用 #define
定义常量来增强可读性
1 | #include <stdio,h> |
这个指令告诉 CPP
从 系统库
中读取 stdio.h
,并添加到 当前源文件
中;下一行告诉 CPP
从 本地目录
中获取 myheader.h
,并添加到 当前源文件中
1 | #undef FILE_SIZE |
这个指令告诉 CPP 取消已定义的 FILE_SIZE,并定义它为 30
1 | #ifndef MESSAGE |
这个指令告诉 CPP
只要当 MESSAGE
未定义时,才定义 MESSAGE
1 | #ifdef DEBUG |
这个指令告诉 CPP
,如果定义了 DEBUG
,则执行语句。
预定义宏
ANSI C 定义了许多宏
1 | #include <stdio.h> |
当上面的代码在 main.c 中编译和执行时,它会产生下列结果:
1 | File :/Users/mac/Desktop/预处理器/预处理器/main.m |
预处理器运算符
- 宏延续运算符 ()
一个宏通常写在一个单行上。但是如果宏太长,一个单行容纳不下,则使用 宏延续运算符(\)。例如:
1 | #define msg(a,b) \ |
- 字符串常量化运算符(#)
在宏定义中,把一个 宏参数
转为 字符串常量
在 main.c 中 编译和运行上面的代码,得到下面的结果
1 | 1and'a' |
- 标记粘贴运算符(##)
宏定义内标记粘贴运算符(##)会合并两个参数
参数化宏
#define square(x) (x*x)
1 | #define max(x,y) \ |
- Post title:C语言学习12:预处理器
- Post author:张建
- Create time:2023-02-15 00:13:38
- Post link:https://redefine.ohevan.com/2023/02/15/C学习/C语言学习12:预处理器 2/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.