OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2410|回复: 1

这种不常用printf的方法,怎样理解?

[复制链接]

8

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-2-13
在线时间
7 小时
发表于 2017-2-13 19:40:36 | 显示全部楼层 |阅读模式
#define SRAM_DEBUG_ON         1
#define SRAM_INFO(fmt,arg...)           printf("<<-SRAM-INFO->> "fmt"\n",##arg)
#define SRAM_ERROR(fmt,arg...)          printf("<<-SRAM-ERROR->> "fmt"\n",##arg)
#define SRAM_DEBUG(fmt,arg...)          do{\
                                          if(SRAM_DEBUG_ON)\
                                          printf("<<-SRAM-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\
                                          }while(0)

以上程序中fmt和arg代表什么?
printf函数中SRAM-INFO为什么加这种符号,fmt为什么引起来,argue为什么前面加##?
这个语句printf("<<-SRAM-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg)中 [%d]和__LINE__什么意思?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-3-9
在线时间
9 小时
发表于 2017-2-14 00:47:54 | 显示全部楼层
__LINE__   编译器预定义宏,这个代表行号,当前文件的行号
##            符号拼接

MSDN上有个例子:

#define paster( n ) printf( "token"#n" = %d\n", token##n )

int token9 = 100;

再调用  paster(9);宏展开后token##n直接合并变成了token9。整个语句变成了

printf( "token""9"" = %d", token9 );

在C语言中字符串中的二个相连的双引号会被自动忽略,于是上句等同于

printf("token9 = %d", token9);。

即输出token9 = 100
来来,我是一个白菜,菜菜菜。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 00:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表