- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有如下包含字符串化的 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/
我想声明一个静态常量数组,其中包含带有版本信息的字符串。 我已经有两个带有版本号的宏,我想基于它生成一个初始的 const 字符串。 我正在尝试使用描述的方法 here ,但它无法像预期的那样使用可用
当使用 C 预处理器时,可以像这样对宏参数进行字符串化: #define TO_STRING(x) "a string with " #x 等使用时,结果如下: TO_STRING(test) 将扩展
我有如下包含字符串化的 C 代码。 #define xstr(s) str(s) #define str(s) #s #define foo 4 现在 xstr (foo) 正确地计算为“4”。 但是
在 CPAN 模块的文档中 DateTime我发现了以下内容: Once you set the formatter, the overloaded stringification method wi
它看起来像 maxpairs不喜欢在具有未定义值的列表上调用: > my @foo; @foo[2] = 4; say @foo.maxpairs; Use of uninitialized valu
我是一名优秀的程序员,十分优秀!