c语言宏定义有无参数的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言宏定义有无参数的区别相关的知识,希望对你有一定的参考价值。

你是指带参的和不带参数的?

不管带不带参数,一定要记住一点,“原样替换”是宏定义的本质。
在处理之前做了文本替换的工作。

如果说区别的话, 带参数的需要将对应的文本导入到宏定义的定义中去然后再替换,比不带参数多了一步
#define M(y) y*y+3*y /*宏定义*/
k=M(5); /*宏调用*/
那么在编译之前就会变成
k= 5*5 + 3*5

#define M(y) y*y+3*y /*宏定义*/
k=M(3+x); /*宏调用*/
那么在编译之前就会变成
k=3+x*3+x+3*3+x (注意这里原样替换,不能加括号的)
参考技术A 有参数的话 就先于给了常量 不能修改,而没有参数 可以在程序里重新赋值。例如#define N 18 N一直都是18 你在程序里改 N=10;并不能改变值。 参考技术B

以上是关于c语言宏定义有无参数的区别的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的“宏”是指啥?

C语言 预处理详解(#include#define#if,特殊预定宏)

C语言 预处理详解(#include#define#if,特殊预定宏)

C语言带参数的宏定义:定义宏名时可以不写出参数???

C语言宏定义实现可变参数

C语言陷阱与技巧第18节,函数式宏定义的“缺陷”,没有参数类型检查,产生多次副作用怎么办?