以下c宏声明是什么意思?

时间:2015-04-27 15:41:06

标签: c macros

如以下c代码:

#define __xstr(s) __str(s)
#define __str(s) #s

#s是什么意思?

2 个答案:

答案 0 :(得分:2)

这是Stringification operator

  

#运算符(称为"字符串化运算符")将标记转换为字符串,适当地转义任何引号或反斜杠。

     

示例:

#define str(s) #s

str(p = "foo\n";) // outputs "p = \"foo\\n\";"
str(\n)           // outputs "\n"
  

如果要对宏参数的扩展进行字符串化,则必须使用两个级别的宏:

#define xstr(s) str(s)
#define str(s) #s
#define foo 4

str (foo)  // outputs "foo"
xstr (foo) // outputs "4"

最后一个示例中的代码非常接近问题中的代码。请注意,正如 @KeithThompson 所提到的," 标识符以两个下划线开头,或者下划线后跟一个大写字母,保留"

答案 1 :(得分:0)

宏允许执行 stringification ,即将宏参数转换为字符串:

__xstr(foo)收益"foo"

__xstr(4)收益"4"

#define BLA bar

__xstr(BLA)收益"bar"

您需要两个级别的宏来实现此目的,有关详细信息,请参阅此处:

https://gcc.gnu.org/onlinedocs/cpp/Stringification.html