如果我使用标准预处理,那么我可以通过以下方式执行间接引用:
#define foo bar
#define quoteme_(x) #x
#define quoteme(x) quoteme_(x)
然后只需使用quoteme(foo)
获取"bar"
我想这样做,但在传统模式下使用预处理器。我试图将#x
替换为'x'
,但quoteme(foo)
只返回'foo'
。
非常感谢任何帮助。
答案 0 :(得分:1)
使用GCC附带的cpp
(已测试4.8.1)和代码(example.c
):
#define foo bar
#define quoteme_(x) "x"
#define quoteme(x) quoteme_(x)
quoteme(foo)
cpp -traditional example.c
输出的相关部分是:
"foo"
(您可以在替换quoteme_(x)
时使用单引号,类似于获取'foo'
)。这就是你在问题中观察到的。
AFAIK,没有办法让'bar'
或"bar"
退出传统的预处理系统。预标准(传统)系统没有标准化,并且有不同系统表现不同的细节。然而,宏观论点在替换之后被扩展,而不是像之前的C89及之后那样,这导致了你所看到的结果。