分享
16、 预处理器
输入“/”快速插入内容
16、
预处理器
飞书用户5985
2024年3月6日修改
C
预处理
是编译过程中一个单独的步骤,是一个文本替换工具而已。所有的
预处理
命令都是以井号(#)开头。
#
define
代码块
C
#define
MAX_ARRAY_LENGTH 20
这个
指令
告诉编译器把所有的 MAX_ARRAY_LENGTH 定义为 20。使用
#define
定义常量来
增强可读性。
代码块
C
#include <stdio.h>
#define MESSAGE "You wish!"
#define MAX_ARRAY_LENGTH 20
int main(void)
{
printf("Here is the message: %s\n", MESSAGE);
printf("max array length : %d\n", MAX_ARRAY_LENGTH );
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
代码块
C
Here is the message: You wish!
max array length : 20
#define更多用法
宏定义函数
C语言一个强大的功能是可以使用参数化的宏来模拟函数。例如,
代码块
C
int
square
(
int
x
)
{
return
x
*
x
;
}
我们可以使用宏重写上面的代码,如下:
#define
square
(
x
)
((
x
)
*
(
x
))
在使用带有参数的宏之前,必须使用
#define
指令定义。参数列表是括在圆括号内,且必须紧跟在宏名称的后边。宏名称和左圆括号之间不允许有空格。例如:
代码块
C
#include <stdio.h>
#define square(x) ((x) * (x))
int main(void)
{
printf("10*10=%d\n", square(10));
return 0;
}
宏延续运算符(\)
一个宏通常写在一个单行上。但是如果宏太长,一个单行容纳不下,则使用宏延续运算符(\)。例如:
代码块
C
#define
square
(
x
)
\
((
x
)
*
(
x
))
标记粘贴运算符(##)
宏定义内的标记粘贴运算符(##)会合并两个参数。它允许在宏定义中两个独立的标记被合并为一个标记。例如:
代码块
C
#include <stdio.h>
#define tokenpaster(n) printf ("token = %d",
token
##n)
int main(void)
{
int token34 = 40;
tokenpaster(34);
return 0;
}