gpt4 book ai didi

c - C语言中如何用宏替换函数

转载 作者:行者123 更新时间:2023-12-01 20:21:11 26 4
gpt4 key购买 nike

有时,在我从 Linux 驱动程序借用的 C 代码中,我想将一些宏更改为可以在我的环境中使用的函数。但前面的宏可以接受 3 或 4 个参数。
例如,如果我想替换

SMSC_TRACE(pdata, probe, "Driver Parameters:");   // 3 arguments  

进入

printf("Driver Parameters:");  

并替换

SMSC_TRACE(pdata, probe, "LAN base: 0x%08lX", (unsigned long)pdata->ioaddr); // 4 arguments  

进入

printf("LAN base: 0x%08lX", (unsigned long)pdata->ioaddr);  

我该怎么做?我试过了

#define SMSC_TRACE((a), (b), (c)) printf((c))  
#define SMSC_TRACE((a), (b), (c), (d)) printf((c), (d))

但似乎不起作用。似乎只有最后一个生效。

编辑:这似乎是可能的。

#define SMSC_TRACE(pdata, nlevel, fmt, args...) printf(fmt "\n", ##args)

最佳答案

您可以使用variadic macro来做到这一点,它采用可变数量的参数:

#define SMSC_TRACE(a,b,...) printf(__VA_ARGS__)

如果你想让这个宏执行多个语句,那么你需要一个do/while(0)

例如:

#define SMSC_TRACE(a,b,...) \
do \
{ \
printf("%c\n",a); \
printf("%d\n",b); \
printf(__VA_ARGS__); \
} \
while (0)

关于c - C语言中如何用宏替换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com