首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符串宏总是添加单个空格字符。

字符串宏总是添加单个空格字符。
EN

Stack Overflow用户
提问于 2016-09-21 13:42:02
回答 1查看 104关注 0票数 1

给定以下打印字符串的代码,该字符串是两个单词的字符串:

代码语言:javascript
复制
#define PORT_INFO_MAC_2(portNum)   port:     portNum

#define PORT_INFO_MAC(portNum) PORT_INFO_MAC_2(portNum)

/* Stringify macro expansion instead of the macro itself */
#define INVOKE_MACRO(...) #__VA_ARGS__

printf(" %s " , INVOKE_MACRO(PORT_INFO_MAC(1)) ); /* In a more general way, I'll be using it like follows: INVOKE_MACRO(PORT_INFO_MAC(2), PORT_INFO_MAC(1), ...) */

输出始终是" port: 1 ",在"port""1"之间只有一个空格。为什么总是有一个单独的空间,是否有方法来控制空间的数量?

PORT_INFO_MAC_2宏中在portportNum之间更改空格的数量并不会改变输出空间的大小。

编辑

似乎有两种情况,在第一种情况下,portportNum是最近的-- PORT_INFO_MAC_2(portNum) port:portNum,它们之间的输出没有空间。在第二种情况下,在它们之间的宏中存在任意数量的空格,输出中的空格数量总是1,对此有什么正式的解释吗?对此有什么控制吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-21 13:57:53

为什么总是有一个单独的空间,是否有方法来控制空间的数量?

因为这是指定字符串化运算符要做的事情:

如果替换列表中的参数紧接在#预处理令牌之前,则这两个标记都被包含相应参数的预处理令牌序列的拼写的单个字符串文字预处理令牌替换。参数的预处理标记之间的每一个空格都成为字符串文本中的单个空格字符。

(C2011 6.10.3.2/2;重点添加)

当然,如果预处理标记之间根本没有空白,那么字符串化中就不会出现空白。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39618298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档