前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于字符串输出的一些探讨

关于字符串输出的一些探讨

作者头像
Qt君
发布2019-07-16 11:30:06
2800
发布2019-07-16 11:30:06
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

对使用STR(...) #__VA_ARGS__宏输出的字符串的探讨,别有一番风味。

1. 使用以下宏的对照结果

代码语言:javascript
复制
#define STR(...) #__VA_ARGS__

1.1 对照1

  • 分析:左括号(与右括号)空格被忽略。

序号

代码

输出结果

1

STR(1,2,3)

"1,2,3"

2

STR(1, 2, 3)

"1, 2, 3"

3

STR(1 , 2 , 3)

"1 , 2 , 3"

4

STR( 1 , 2 , 3 )

"1 , 2 , 3"


1.2 对照2

  • 分析: 单个参数至多保留一个空格。
代码语言:javascript
复制
STR((    1   ,    2       ,             3   ))
  • 输出:
代码语言:javascript
复制
"( 1 , 2 , 3 )"

1.3 对照3

  • 分析:单个参数代码换行,实际不换行,多个空格变为一个空格。
代码语言:javascript
复制
STR(1
    2
    3)
  • 输出:
代码语言:javascript
复制
"1 2 3"

1.4 对照4

  • 分析:\n实际显示的字符会被保留(与1.3成对照组)。
代码语言:javascript
复制
STR(1\n
    2\n
    3\n)
  • 输出:
代码语言:javascript
复制
"1\n 2\n 3\n"

1.5 对照5

  • 分析:带双引号会被转义。
代码语言:javascript
复制
STR(1, "2", '3')
  • 输出:
代码语言:javascript
复制
"1, \"2\", '3'"

2. 一些语法解释

  • ...当我们无法列出传递的所有参数的类型和数目时用于占位符的作用;
  • #为把参数转换成字符串;
  • __VA_ARGS__为可变参数宏,一些使用场景:
代码语言:javascript
复制
fprintf(stdout, format, __VA_ARGS__)

3. 最后

  • 在实际很少很少用到它,很多时候了解就可以了;
  • 倒是这一条宏#define STR(...) #__VA_ARGS__可以学习下。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 使用以下宏的对照结果
  • 1.1 对照1
  • 1.2 对照2
  • 1.3 对照3
  • 1.4 对照4
  • 1.5 对照5
  • 2. 一些语法解释
  • 3. 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档