C语言宏用法
宏(Macro)是C语言中一种预处理机制,通过#define
指令定义,用于在编译前替换代码中的特定文本。宏可以简化代码、提高效率,但需注意其潜在风险。本文章将总结C语言宏的基本使用方法和技巧。所有用法举例都基于 Ubuntu20.04.6LTS、GNU C99标准。
- C99 变参宏
C语言变参宏同变参函数一样可接收任意个数的参数,称为变长参数。函数原型中变长参数用...表示,C99 标准中可以使用__VA_ARGS__转发变长参数。如下代码片段定义了名为“print”的宏函数,它接受固定参数 fmt 和变长参数;当变长参数为空时,__VA_ARGS__ 转发的参数为空,所以 fmt 后面会有多余的逗号分隔符会导致编译错误。不过GNU有规则解决该问题——用 ## 连接__VA_ARGS__ 和 逗号分隔符,这样就可以消除多余的逗号分隔符。
// 版本1(多余的逗号分隔符)
#define print(fmt, ...) printf(fmt, __VA_ARGS__)
print("12345"); // printf("12345",);// 版本2
#define print(fmt, ...) printf(fmt, ##__VA_ARGS__)
print("12345"); // printf("12345");