它在C中意味着什么:#define ABC(a,b){#a,a,b}

时间:2017-11-17 09:48:20

标签: c ansi-c

在C中意味着什么:#define ABC(a,b){#a,a,b}?

我知道ABC是带参数的宏(a,b)。

但它是什么意思{#a,a,b},尤其是什么意思"#a"在这种情况下?

1 个答案:

答案 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);