#define的神秘用法

Promi 2008-12-29 03:31:40
#define f(a,b) a##b
#define d(a) #a
#define s(a) d(a)

void main( void )
{
puts(d(f(a,b)));
puts(s(f(a,b)));
}

输出结果:
f(a,b)
ab
...全文
959 75 打赏 收藏 转发到动态 举报
写回复
用AI写文章
75 条回复
切换为时间正序
请发表友善的回复…
发表回复
autotyx 2009-01-13
  • 打赏
  • 举报
回复
需要指出,不是编译器,而是预处理器,
用户 昵称 2009-01-13
  • 打赏
  • 举报
回复
嗯。
悠悠长风 2009-01-12
  • 打赏
  • 举报
回复
没什么神秘的啊
星羽 2009-01-12
  • 打赏
  • 举报
回复
zhangxichao 2009-01-12
  • 打赏
  • 举报
回复
学下
thinkboy234 2009-01-12
  • 打赏
  • 举报
回复
up 展开后理解很简单了
Sevenlight_x 2009-01-12
  • 打赏
  • 举报
回复
学习了
shilei_815 2009-01-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hearoequal 的回复:]
#,##
# 和 ## 操作符是和#define宏使用的. 使用# 使在#后的首个参数返回为一个带引号的字符串. 例如, 命令

#define to_string( s ) # s

将会使编译器把以下命令

cout < < to_string( Hello World! ) < < endl;

理解为

cout < < "Hello World!" < < endl;

使用##连结##前后的内容. 例如, 命令

#define concatenate( x, y ) x ## y
...
int xy = 10;
...

将会使编译器把

cout < < concatenate( x, y ) < < endl;

解释为

cout < < xy < < endl;

理所当然,将会在标准输出处显示'10'.
[/Quote]

UP 学习!
brookmill 2009-01-12
  • 打赏
  • 举报
回复
mark
stealfire 2009-01-12
  • 打赏
  • 举报
回复

相当汗啊,学习了、
liurenjie2008 2009-01-12
  • 打赏
  • 举报
回复
嗯~明白了~十分感谢~
qqxiaoyatou 2009-01-12
  • 打赏
  • 举报
回复
我想知道这个[Quote=引用 33 楼 hemoparrot 的回复:]
再涨个见识,以前看到的一个兄弟的email,太牛了。内容如下:
########################################################################
echo -e ‘#define cat(c,d) c##.d \n #define mb(a,b) a##@b \n mb(cat(xiyou,wangcong),cat(gmail,com))’ | gcc -E -xc - 2>/dev/null |tail -n 1
########################################################################
有兴趣的可以到shell下运行。
摘录自:http://w…
[/Quote]
melody1128 2009-01-12
  • 打赏
  • 举报
回复
。。。
chenyu2202863 2009-01-11
  • 打赏
  • 举报
回复
浪费脑细胞~~
arong1234 2009-01-11
  • 打赏
  • 举报
回复
简单的说,宏不支持嵌套宏,宏参数中的表达式不会被展开f(a(b))中,a(b)会被当作整体,而不会对a(b)当作宏进行计算
[Quote=引用 5 楼 da_ke 的回复:]
不明白,再解释一下好吗?
[/Quote]
yyjjack123 2009-01-11
  • 打赏
  • 举报
回复
受教了,
hua_zhixing_ 2009-01-11
  • 打赏
  • 举报
回复
初学者,看了有点瞢。
lwzlemon 2009-01-11
  • 打赏
  • 举报
回复
学习!
phonlee 2009-01-11
  • 打赏
  • 举报
回复
  micro/macro

其实微软本质上是macro_soft
china_west 2009-01-11
  • 打赏
  • 举报
回复
预编译啊
加载更多回复(55)
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平;2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

69,371

社区成员

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

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