C:用字符串连接_计数器_
我想字符串化C:用字符串连接_计数器_,c,C,我想字符串化\uuuu计数器\uuuu并将其打印为字符串而不是整数,这可能吗 printf("%s\n", #__COUNTER__); 我尝试了以下方法,但不起作用 hello.c:6:19: error: stray ‘#’ in program printf("%s\n",#__COUNTER__); 是的,但它需要一个间接过程,因为不能在宏之外使用#操作符 #define STRINGIFY_2(a) #a #define STRINGIFY(a) STRINGIFY_2(a) p
\uuuu计数器\uuuu
并将其打印为字符串而不是整数,这可能吗
printf("%s\n", #__COUNTER__);
我尝试了以下方法,但不起作用
hello.c:6:19: error: stray ‘#’ in program
printf("%s\n",#__COUNTER__);
是的,但它需要一个间接过程,因为不能在宏之外使用
#
操作符
#define STRINGIFY_2(a) #a
#define STRINGIFY(a) STRINGIFY_2(a)
printf("%s\n", STRINGIFY(__COUNTER__));
展开\uuuuu COUNTER\uuuu
需要双宏,否则结果将是“\uuuu COUNTER\uuuuu”
如果你不想重新发明轮子,那正是你要做的。是的,但这需要一个间接的过程,因为你不能在宏之外使用
操作符
#define STRINGIFY_2(a) #a
#define STRINGIFY(a) STRINGIFY_2(a)
printf("%s\n", STRINGIFY(__COUNTER__));
展开\uuuuu COUNTER\uuuu
需要双宏,否则结果将是“\uuuu COUNTER\uuuuu”
如果你不想重新发明这个轮子,那正是你要做的。你必须用一个预处理器宏对它进行字符串化
#define XSTR(s) STR(s)
#define STR(s) #s
printf("%s", XSTR(counter));
必须使用预处理器宏对其进行字符串化
#define XSTR(s) STR(s)
#define STR(s) #s
printf("%s", XSTR(counter));
计数器的定义是什么?此外,您不应使用
来使用宏,而应仅用于定义宏我不知道“作为字符串打印”意味着什么。打印时整数与字符串有什么不同?然后只需将snprintf
与%d
一起使用即可。我有一种感觉,答案中提出的宏并不是你真正需要的。最好描述一下真正的问题。好的,那么答案就是你需要的。显然,要将其与其他内容连接起来,您需要添加另一个间接级别。始终从预处理器过程的角度考虑。像预处理器一样思考:)计数器的定义是什么?此外,您不应使用
来使用宏,而应仅用于定义宏我不知道“作为字符串打印”意味着什么。打印时整数与字符串有什么不同?然后只需将snprintf
与%d
一起使用即可。我有一种感觉,答案中提出的宏并不是你真正需要的。最好描述一下真正的问题。好的,那么答案就是你需要的。显然,要将其与其他内容连接起来,您需要添加另一个间接级别。始终从预处理器过程的角度考虑。像预处理器一样思考:)如果我理解正确的话,第一个STRINGIFY(_uuu计数器uu)将导致STRINGIFY_2(0),然后会导致“0”?(不知道#仅在宏定义中有效)@Har完全正确-这个用例真的需要双宏舞蹈吗?我认为只有在将东西粘贴在一起时才需要这样做。@ChristianGibbons,出于同样的原因,这既不是#
也不是#
在粘贴或字符串化它们之前扩展它们的参数。哦,对了。我知道我遗漏了一些东西。因此,如果我理解正确,第一个STRINGIFY(_u;COUNTER___;)将导致STRINGIFY_2(0),这将导致“0”?(不知道#仅在宏定义中有效)@Har完全正确-这个用例真的需要双宏舞蹈吗?我认为只有在将东西粘贴在一起时才需要这样做。@ChristianGibbons,出于同样的原因,这既不是#
也不是#
在粘贴或字符串化它们之前扩展它们的参数。哦,对了。我知道我遗漏了什么。纠正了错误。纠正了错误。