【发布时间】:2013-04-26 05:29:14
【问题描述】:
gcc (GCC) 4.7.2
c89
是否可以对可变参数宏进行字符串化?
我有以下宏,我想从fmt 和参数中输出结果字符串。
#define ERROR_MESSAGE(priority, fmt, ...) \
do { \
MODULE_LOG(priority, fmt, ##__VA_ARGS__);\
} while(0)
所以,我只想获取fmt 和##__VA_ARGS__ 的完整字符串,以便将其分配给char * 以对其执行一些额外的操作。
【问题讨论】:
-
double-hash 是连接操作符,而不是 stringify 操作符,它是单个哈希。
-
C99 中引入了可变参数宏
-
@JoachimPileborg:
##的使用是一个 GCC 扩展,如果__VA_ARGS__列表为空,它会删除##之前的逗号。 SO上有一个关于这个的问题;我在最近重读的一个答案中遇到了这个符号。 (一个外部参考是Macro definition;一个更好的是C #define macro for debug printing。)