Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用字符串和点连接_C_C Preprocessor - Fatal编程技术网

C 用字符串和点连接

C 用字符串和点连接,c,c-preprocessor,C,C Preprocessor,我有许多字符串值(查找键),它们组合为X.Y.Z,其中X和Y是硬编码字符串,Y是单个值。我正在尝试编写一个宏测试(Y),它给我X.Y.Z 例如: TEST(hello) -> X.hello.Z TEST(foo) -> X.foo.Z 到目前为止,我的所有尝试要么导致未扩展的值,要么“错误:粘贴“hello”和“.”未提供有效的预处理标记”。我已经尝试了几层间接寻址,但我想我还没有完全理解它是如何工作的:-(您是如何尝试的?使用#将不起作用,因为#用于创建单个令牌 #define

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

例如:

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

到目前为止,我的所有尝试要么导致未扩展的值,要么“错误:粘贴“hello”和“.”未提供有效的预处理标记”。我已经尝试了几层间接寻址,但我想我还没有完全理解它是如何工作的:-(

您是如何尝试的?使用
#
将不起作用,因为
#
用于创建单个令牌

#define TEST(a) X.a.Z
我们应该做到这一点


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

您是如何尝试的?使用
##
将不起作用,因为
##
用于创建单个令牌

#define TEST(a) X.a.Z
我们应该做到这一点


Edit:这将为您创建标记,而不是字符串。@如果您正在构建字符串,paddy的答案就是您想要的。

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

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

只有在处理常量时,才能在宏中执行此操作。例如,如果传递的
hello
实际上是所需的字符串,而不是包含字符串的变量

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

请展示你的一些尝试。如果我们看不到你做错了什么,我们就无法消除你的误解。请展示你的一些尝试。如果我们看不到你做错了什么,我们就无法消除你的误解。哈哈,是的,我看了你的答案,突然怀疑了我的答案。我想我们已经涵盖了两个基础。实际上,我需要这两个,所以我想很好:-)我会在角落里哭一会儿,花了一个小时在这个问题上,当有这么简单的解决办法。非常感谢。哈哈,是的,我看着你的答案,突然怀疑我的答案。我想我们两个都有。我实际上需要两个,所以这很完美:-)我会在角落里哭一会儿,在这个问题上花了一个小时,有这么简单的解决方案。非常感谢。我想这只是我在制作宏时的一个习惯——绝对避免任何奇怪的行为,这些行为可能是由于对宏的奇怪使用而导致的。在这种情况下,它们可能不是必需的。我想这只是我在制作宏时的一个习惯——绝对避免由于使用宏的奇怪行为而导致的任何奇怪行为。在这种情况下,它们可能不是必需的。