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

2019-10-15 03:09发布

#define SRAM_DEBUG_ON         1
#define SRAM_INFO(fmt,arg...)           printf("<<-SRAM-INFO->> "fmt" ",##arg)
#define SRAM_ERROR(fmt,arg...)          printf("<<-SRAM-ERROR->> "fmt" ",##arg)
#define SRAM_DEBUG(fmt,arg...)          do{
                                          if(SRAM_DEBUG_ON)
                                          printf("<<-SRAM-DEBUG->> [%d]"fmt" ",__LINE__, ##arg);
                                          }while(0)

以上程序中fmt和arg代表什么?
printf函数中SRAM-INFO为什么加这种符号,fmt为什么引起来,argue为什么前面加##?
这个语句printf("<<-SRAM-DEBUG->> [%d]"fmt" ",__LINE__, ##arg)中 [%d]和__LINE__什么意思?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
tuy0326
1楼-- · 2019-10-15 07:54
__LINE__   编译器预定义宏,这个代表行号,当前文件的行号
##            符号拼接

MSDN上有个例子:

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

int token9 = 100;

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

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

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

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

即输出token9 = 100

一周热门 更多>