有时,在我从Linux驱动程序中借用的C代码中,我想将一些宏更改为我可以在我的环境中使用的函数.但是这个以前的宏可以采用3或4个参数.
例如,如果我想要替代
SMSC_TRACE(pdata, probe, "Driver Parameters:"); // 3 arguments
Run Code Online (Sandbox Code Playgroud)
成
printf("Driver Parameters:");
Run Code Online (Sandbox Code Playgroud)
替代
SMSC_TRACE(pdata, probe, "LAN base: 0x%08lX", (unsigned long)pdata->ioaddr); // 4 arguments
Run Code Online (Sandbox Code Playgroud)
成
printf("LAN base: 0x%08lX", (unsigned long)pdata->ioaddr);
Run Code Online (Sandbox Code Playgroud)
我怎么做?我试过了
#define SMSC_TRACE((a), (b), (c)) printf((c))
#define SMSC_TRACE((a), (b), (c), (d)) printf((c), (d))
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.只有最后一个似乎生效.
编辑:这似乎也许.
#define SMSC_TRACE(pdata, nlevel, fmt, args...) printf(fmt "\n", ##args)
Run Code Online (Sandbox Code Playgroud)
#define SMSC_TRACE(a,b,...) printf(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
如果您希望此宏执行多个语句,那么您需要一个do/while(0).
例如:
#define SMSC_TRACE(a,b,...) \
do \
{ \
printf("%c\n",a); \
printf("%d\n",b); \
printf(__VA_ARGS__); \
} \
while (0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |