C语言的宏函数及其输出到底是实现的?

辧聪 2011-08-20 04:11:26
简单的宏替换我还是懂的但是像下面这例子

#define D(fmt,args...) printf("%s - %s - %d:"fmt"\n",__FILE__,__FUNCTION__,_ _LINE__,##args)
怎么输入 怎么输出。在具体函数中怎么11对应起来的。。
刚注册,没分。。
...全文
222 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackylongchen 2011-08-24
  • 打赏
  • 举报
回复
很受用啊
谢谢大家!
tsh185 2011-08-21
  • 打赏
  • 举报
回复
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define D(fmt,args...) \
5 printf("%s - %s - %d: "fmt"\n",__FILE__,__FUNCTION__,__LINE__,##args)
6
7 int main(int argc , char *argv[])
8 {
9 int a = 100 ;
10 char b = 'b' ;
11 D("a = %d b =%c",a,b);
12 return 0 ;
13 }


输出:

a.c - main - 11: a = 100 b =b
modicum_lf 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hua_yang 的回复:]
%s对应__FILE__:对应文件名
%s对应__FUNCTION__:对应函数名
%d对应__LINE__:对应行号
fmt对应##args:表示链接,可以接受更多参数输入

总体来讲:
D(fmt,args...)这个宏可以接受变参输入,然后在输出前,加上文件,函数名和行号
例如:
D("%d %s", 10, "hello")
就会输出:
a.cpp - func - 1……
[/Quote]

++

mymtom 2011-08-21
  • 打赏
  • 举报
回复
可变参数宏
VCACC 2011-08-20
  • 打赏
  • 举报
回复
顺便学习了
[Quote=引用 1 楼 hua_yang 的回复:]

%s对应__FILE__:对应文件名
%s对应__FUNCTION__:对应函数名
%d对应__LINE__:对应行号
fmt对应##args:表示链接,可以接受更多参数输入

总体来讲:
D(fmt,args...)这个宏可以接受变参输入,然后在输出前,加上文件,函数名和行号
例如:
D("%d %s", 10, "hello")
就会输出:
a.cpp - func - ……
[/Quote]
AnYidan 2011-08-20
  • 打赏
  • 举报
回复
这个还是变参的
CJacky++ 2011-08-20
  • 打赏
  • 举报
回复
编译不过,留名。。。。
jernymy 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hua_yang 的回复:]
%s对应__FILE__:对应文件名
%s对应__FUNCTION__:对应函数名
%d对应__LINE__:对应行号
fmt对应##args:表示链接,可以接受更多参数输入

总体来讲:
D(fmt,args...)这个宏可以接受变参输入,然后在输出前,加上文件,函数名和行号
例如:
D("%d %s", 10, "hello")
就会输出:
a.cpp - func - 1……
[/Quote]

正解
匚匚 2011-08-20
  • 打赏
  • 举报
回复
fmt不用这样吗: #fmt
5t4rk 2011-08-20
  • 打赏
  • 举报
回复
就是格式对应

参数进行替换

还是原函数的调用

暮雨晨舟 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hua_yang 的回复:]
%s对应__FILE__:对应文件名
%s对应__FUNCTION__:对应函数名
%d对应__LINE__:对应行号
fmt对应##args:表示链接,可以接受更多参数输入

总体来讲:
D(fmt,args...)这个宏可以接受变参输入,然后在输出前,加上文件,函数名和行号
例如:
D("%d %s", 10, "hello")
就会输出:
a.cpp - func - 1……
[/Quote]

++
东莞某某某 2011-08-20
  • 打赏
  • 举报
回复
这个还是变参的,先看看简单的宏替-函数的例子
辧聪 2011-08-20
  • 打赏
  • 举报
回复
Thank 有那么点概念了
hua_yang 2011-08-20
  • 打赏
  • 举报
回复
##在宏中是连接符号
例如:
#define NUM(a,b,c) (a##b##c)

NUM(1,2,3)就等同于123
hua_yang 2011-08-20
  • 打赏
  • 举报
回复
%s对应__FILE__:对应文件名
%s对应__FUNCTION__:对应函数名
%d对应__LINE__:对应行号
fmt对应##args:表示链接,可以接受更多参数输入

总体来讲:
D(fmt,args...)这个宏可以接受变参输入,然后在输出前,加上文件,函数名和行号
例如:
D("%d %s", 10, "hello")
就会输出:
a.cpp - func - 100:10 hello

其中:a.cpp文件名,func函数名,100行号

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧