C语言宏定义详解

文章目录

  • 标识符 #define
  • 预编译中的过程
      • 替换与优先级
      • 宏定义的分号
      • 带有副作用的宏
  • 和函数的比较
    • 特性比较
  • 用宏定义实现函数无法实现的功能
    • 传类型作为参数
    • 字符串拼接
    • 补充


读完大约需要 10 分钟

C语言宏定义详解_第1张图片

标识符 #define

如何定义一个宏?
我们要使用 #define 来实现

#define 允许我们把参数替换在文本中,具体的格式是这样的

#define name( parament-list ) stuff

其中的parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中

比如

#define ADD(x,y) ((x)+(y))
//#define name( parament-list ) stuff

我们可以和这个格式一样对应起来

其中需要注意在定义宏的时候

  1. name 和 后方的左括号 ( ,要紧邻
  2. 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

你可能感兴趣的:(c语言学习,c语言,c++,c#)