在C中意味着什么:#define ABC(a,b){#a,a,b}?
我知道ABC是带参数的宏(a,b)。
但它是什么意思{#a,a,b},尤其是什么意思"#a"在这种情况下?
答案 0 :(得分:2)
这用于进行字符串化。来自manual。
有时您可能希望将宏参数转换为字符串 不变。参数不会在字符串常量内替换,但是你 可以使用
#
预处理运算符。当一个宏参数 与前导#
一起使用,预处理器将其替换为 实际参数的文字文本,转换为字符串常量。 与普通参数替换不同,参数不是 首先是宏观扩张。这称为字符串化。
手册中有一个例子可以清除这个想法。
#define WARN_IF(EXP) \
do { if (EXP) \
fprintf (stderr, "Warning: " #EXP "\n"); } \
while (0)
WARN_IF (x == 0);
(expanded to)==> do { if (x == 0)
fprintf (stderr, "Warning: " "x == 0" "\n"); } while (0);