0

如果我使用标准预处理,那么我可以通过以下方式执行间接引用:

#define foo bar
#define quoteme_(x) #x
#define quoteme(x) quoteme_(x)

然后就quoteme(foo)用来获取"bar"

我想这样做,但在传统模式下使用预处理器。我试图只替换#x'x'quoteme(foo)只是返回'foo'

任何帮助深表感谢。

4

1 回答 1

1

使用cppGCC 附带的(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 和更高版本之前,这就是导致您看到的结果的原因。

于 2013-08-13T21:21:54.270 回答