C语言的宏定义与C++的inline
2026/6/4 23:38:00 网站建设 项目流程

首先明确的时,在程序的预处理时,C语言的宏定义是直接在程序中展开,而C++的inline及既可能展开,也可能不展开(取决于你的编译设置,inline内的代码数量)

先来说明C中的宏定义:

1.定义常量

#define MAX 100 —— 这就像是把 MAX 这个名称 直接当作 100 来处理

比如: int (*arr[MAX])(int,int) 这个在预处理阶段就会变成 int(*arr[100])(int,int)

值得一提的是,这个并不是只能用于替换数字,而是所有都可以进行替换,

比如 #define YOU xiaoming 在后面的阶段中YOU 都会变成 xiaoming

2.带参数的宏定义

#definename( parament-list ) stuf

值得注意的是(parament-list)应该于与name紧靠在一起,否则会被认为是stuff中的部分

e.g #define ADD(x,y) ((x)+(y)) ——这就是代表后面只要输入了ADD(x,y)就会认为是将x,y 进行相加

比如 printf("%d",ADD(3,4));——就会编译出 7

以上就是宏定义了,接下来讲一下这其中容易出现的小错误

1. #define MAX 1000;

这里的问题是这里会把 ' ; '也直接弄过去,容易出错,比如printf("%d",MAX); 在于处理时就会变成 printf("%d",1000;); 出现error

2.#define ADD(x,y) x+y

这里的问题是 ADD(3==4,5*5) —— 3 == 4+5*5 ->0,可是我想要的结果应该是 25

3.#define ADD(x,y) (x+y)

这里的问题和上面相似,

所以在写带参数的宏定义时 #define ADD(x,y) ((x)+(y)) ,参数和结果都要带();

C++中的inline

结构

inline int ADD(int x,int y )

{

return x+y;

}

调用时,和函数相似,直接调用 ADD (x,y);

e.g

int ret = ADD(3,9);

return ret;

这样设计的初衷是防止在宏定义中的出错点,毕竟要是函数能写错,也是白学了!!

相比于宏定义的无条件展开,这里inline是有一定思想的,当你的代码量超过了一定行数,就不会在预处理阶段展开,(一般在5-10)毕竟要是很长你还展开的话就有点笨了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询