<返回更多

C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?

2021-07-13    峰哥linux编程学堂
加入收藏

取消宏定义

定义变量的时候,不能够重复定义同名变量;同理,定义宏的时候,不可以重复定义同名的宏。例如:

#define MAX 1000

#define MAX 50

此时,重复定义MAX宏,是不合法的代码。但是,我们想在代码中,对MAX宏进行多次不同的定义,应该怎么样?

此时,可以考虑使用#undef来取消之前的宏定义,然后,再重新定义宏。程序测试例子如下:

C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?

 

程序运行结果如下:

C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?

 

可以看到,在程序中,对MAX宏进行了多次定义。在重新定义MAX宏之前,先使用#undef关键字来取消宏的定义,然后,再重新定义宏。

有参宏定义

定义宏的时候,可以携带参数,如同定义函数一样,有形参列表。定义格式如下:

#define 宏名(形参列表) 表达式

注意:这里的形参列表,与函数的形参列表有区别。函数的形参列表有变量的数据类型名,这里定义宏的形参列表,不需要数据类型名。使用带参数宏时,如果需要传递参数,调用方法如同调用函数一样。程序测试例子如下:

C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?

 

程序运行结果如下:

C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?

 

可以看到,编译程序预处理的时候,碰到 print(10, 11);宏,就对宏进行替换展开,替换为:

printf("x = %d, y = %dn", x, y);

但是,x, y 符号是宏的参数,所以,需要进行替换。根据宏定义的参数顺序是 print(x, y);所以,在调用print(10, 11)宏的时候,按顺序替换,使用10替换x,11替换y。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>