c - 为什么 Stringification 不能按预期工作

标签 c

我有如下包含字符串化的 C 代码。

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

现在 xstr (foo) 正确地计算为“4”。

但是 str(foo) 被评估为“foo”。但我认为应该评价为“4”。谁能解释一下它是如何被评估为“foo”的。

最佳答案

由于 C 中的宏扩展规则。使用 str(s) 您定义的 foo 立即被放置为 #foo 而不是评估 foo 的值。当您用 xstr 包装它时,它有机会在应用字符串化之前实际评估 foo

过程是这样的

str(foo)->#foo->"foo"
xstr(foo)->str(4)->#4->"4"

关于c - 为什么 Stringification 不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22824715/

相关文章:

c - 接受套接字函数超时

c - 长整型超出范围

c - 如何在现代多核/多插槽机器上扩展 TCP 监听器

c - 将节点添加到链表会覆盖

c - 需要解释输出

javascript - 如何使用多核 CPU 提高游戏服务器性能

c - 需要以有效方式确定 C 中数组大小的建议

C(或任何)编译器确定性性​​能

c++ - 文件是否需要扩展名才能在 C/C++ 中使用 open() 打开?

c - 将汇编语言翻译成 C [使用 PIC18 写入内存]