【发布时间】:2017-11-17 09:48:19
【问题描述】:
在 C 中是什么意思:#define ABC(a,b) {#a, a, b}?
我知道 ABC 是一个带有参数 (a,b) 的宏。
但是 {#a, a, b} 是什么意思,尤其是在这种情况下“#a”是什么意思?
【问题讨论】:
在 C 中是什么意思:#define ABC(a,b) {#a, a, b}?
我知道 ABC 是一个带有参数 (a,b) 的宏。
但是 {#a, a, b} 是什么意思,尤其是在这种情况下“#a”是什么意思?
【问题讨论】:
这用于进行字符串化。来自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);
【讨论】: