C语言 -- 宏的变长参数定义

C语言宏定义中的可变参数处理

在C语言的宏定义中,我们可以使用可变参数来创建更加灵活和通用的宏。C99标准引入了__VA_ARGS__,而GNU编译器扩展了...args。这两者在处理可变参数时有所不同。本文将介绍它们的区别、使用场景以及相关示例。

背景介绍

__VA_ARGS__(标准C99特性)

__VA_ARGS__ 是C99标准引入的特性,用于宏定义中表示可变参数。它可以与 ## 运算符一起使用,以便在没有可变参数时正确处理格式字符串和其他参数。

...args(GNU扩展)

...args 是GNU编译器的扩展(GCC),允许在宏定义中使用类似于函数的可变参数。与 __VA_ARGS__ 不同,它在使用时并没有与 ## 运算符配合的功能,因此在没有可变参数时可能会出现问题。

示例对比

以下是使用 __VA_ARGS__...args 的示例代码及其区别。

使用 __VA_ARGS__

#include <stdio.h>

#define SM_VAR_GET(x) 1  // 假设SM_VAR_GET返回1
#define pr_info printf   // 假设pr_info是printf的别名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值