永发信息网

C语言可变宏的用法?

答案:2  悬赏:80  手机版
解决时间 2021-11-28 18:24
  • 提问者网友:难遇难求
  • 2021-11-28 06:42
C语言可变宏的用法?
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-11-28 07:44
C语言可变宏的用法如下:
在1999年版本的ISO C 标准中,宏可以象函数一样,定义时可以带有可变参数。宏的语法和函数的语法类似。下面有个例子:
#define debug(format, …) fprintf (stderr, format, __VA_ARGS__)
这里,‘…’指可变参数。这类宏在被调用时,它(这里指‘…’)被表示成零个或多个符号,包括里面的逗号,一直到到右括弧结束为止。当被调用时,在宏体(macro body)中,那些符号序列集合将代替里面的__VA_ARGS__标识符。更多的信息可以参考CPP手册。
GCC始终支持复杂的宏,它使用一种不同的语法从而可以使你可以给可变参数一个名字,如同其它参数一样。例如下面的例子:
#define debug(format, args…) fprintf (stderr, format, args)
全部回答
  • 1楼网友:低音帝王
  • 2021-11-28 07:57
FORMAT就是第一个参数
在这里也就是"Open file success\r\n"

__VA_ARGS__ 是参数中剩余参数的总和 也就是...的部分
比如
BMP_DEBUG_PRINTF("%d %d, %d\n", a, b, c);

这里的"%d %d, %d\n"就是FORMAT 后面的a,b,c就是__VA_ARGS__
用##在这,起到的作用是当__VA_ARGS__为空(类似于你的例子)时 程序可以正确识别 不会报错

你可以尝试修改为#define BMP_DEBUG_PRINTF(FORMAT,...) printf(FORMAT,__VA_ARGS__)

这种情况下 BMP_DEBUG_PRINTF("%d",a);是编译通过的 但是
BMP_DEBUG_PRINTF("test string\n");就会报错了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯