读完大约需要 10 分钟
标识符 #define
如何定义一个宏?
我们要使用 #define 来实现
#define 允许我们把参数替换在文本中,具体的格式是这样的
#define name( parament-list ) stuff
其中的parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中
比如
#define ADD(x,y) ((x)+(y))
//#define name( parament-list ) stuff
我们可以和这个格式一样对应起来
其中需要注意在定义宏的时候
- name 和 后方的左括号 ( ,要紧邻
- stuff 和前面部分相隔一个空格
预编译中的过程
我们已经会定义宏了
宏在预编译过程中会进行文本替换
如果我们定义一个宏,并且要实现其功能
#define SQUARE(x) x*x
int main()
{
int n = 5;
int ret = square(n);
printf("%d",ret);
}
通过执行这个代码,结果会得到 25
具体过程是这样的,首先会替换define
int main()
{
int n = 5;
int ret = n*n;
printf("%d",ret);
}
过程是通过替换实现的
那就导致这样一个结果,如果我们传参是 1+5 呢?
替换与优先级
#define SQUARE(x) x*x
int main()
{
printf("%d",square(1+5));
return 0;
}
我们本来先得到 6*6 = 36
但是结果是 11,为什么?
我们替换了就明白了
int main()
{
printf