【问题标题】:How to embed an integer in a macro string? [duplicate]如何在宏字符串中嵌入整数? [复制]
【发布时间】:2015-09-01 17:31:04
【问题描述】:

我第一次看到字符串化和令牌粘贴。我觉得它可能是这个宏的好工具:

#define MY_NUMBER   3
#define MY_STRING   "the number three: ##MY_NUMBER"
printf("%s\n", MY_STRING);

应该输出:

the number three: 3

【问题讨论】:

  • printf("%s %d\n", MY_STRING, MY_NUMBER)怎么了???
  • printf 仅用于测试。真正的问题是创建宏。
  • 预处理器运算符(# 和 ##)在带引号的字符串文字中不起作用。您也不能使用标记连接来连接字符串文字;只有个别代币。 (但是,您可以通过一个接一个地编写它们来连接两个字符串文字:"Hello, " "world!")。最后,您只能对宏参数使用字符串化运算符 (#)。 @alk:链接的答案很好,但我担心这并不是对这种混乱的真正答案。

标签: c macros stringification


【解决方案1】:

试试这个

#define S_(x) #x
#define S(x) S_(x)

#define MY_NUMBER   3
#define MY_STRING   "the number three: " S(MY_NUMBER)

【讨论】:

  • 为什么不直接写#define S(x) #x
  • @Nasr if S(MY_NUMBER) 然后你得到"MY_NUMBER"
  • @BLUEPIXY,这行得通,但我不明白为什么?你能解释一下第二个 S_(x) 可能在做什么吗?
  • @tarabyte 需要间接调用 make MY_NUMBER expand 3#varvar 字符串化为"var"
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 2013-10-09
  • 2019-01-31
  • 2021-12-07
  • 2022-01-05
  • 2022-08-06
  • 2017-03-28
  • 2021-02-18
相关资源
最近更新 更多