与字符串和点连接

时间:2013-11-06 21:22:07

标签: c c-preprocessor

我有许多字符串值(查找键),它们组合为X.Y.Z,其中X和Y是硬编码字符串,Y是单个值。我正在尝试编写一个宏测试(Y),它给了我X.Y.Z

示例:

TEST(hello) -> X.hello.Z
TEST(foo) -> X.foo.Z

到目前为止,我所有的尝试都导致了未扩展的值,或者错误:粘贴"你好"和"。"不提供有效的预处理令牌'。我已经尝试了几层间接,但我想我还没有完全理解它是如何工作的: - (

2 个答案:

答案 0 :(得分:1)

你好吗?使用##将无效,因为##用于创建单个令牌。

#define TEST(a) X.a.Z

应该这样做。

编辑:错误,这将为您创建令牌,而不是字符串。如果您正在构建字符串,@ paddy的答案就是您想要的。

答案 1 :(得分:1)

如果处理常量,则只能在宏中执行此操作。 ie 如果您传递的hello实际上是您想要的字符串,而不是包含字符串的变量。

#define TEST(s) ("X." #s ".Y")