社区
C语言
帖子详情
#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
...全文
969
75
打赏
收藏
#define的神秘用法
#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
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
thinking in c
理解它们的存储大小和
用法
是编程的起点。接着,你会学习到变量,它是存储数据的容器,以及常量,它们的值在程序运行期间保持不变。了解变量的声明、初始化和作用域规则是编写正确代码的关键。 函数是C语言中的重要...
汇编语言程序设计第4章PPT学习教案.pptx
数值常量包括了二进制、十进制、十六进制、八进制等多种表示方法,这为在不同的上下文中使用最合适的数值表示提供了灵活性。字符串常量通常由双引号括起,而符号常量则是使用标识符来定义的常量,这使得代码更易于...
预处理指令的隐藏技巧:#
define
与#include的高级
用法
在C和C++编程中,预处理指令是编译器在正式编译代码之前执行的一系列操作。其中,`#
define
` 和 `#include` 是两个最为常用的...本文将深入探讨 `#
define
` 与 `#include` 的高级
用法
,带你揭开预处理指令的
神秘
面纱。
#
define
XBYTE ((unsigned char volatile xdata *)
#
define
XBYTE ((unsigned char volatile xdata *) 0) 定义 XBYTE 为 指向 xdata 地址空间unsigned char 数据类型的指针,指针值为0 这样,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)访问外部RAM
Clang 宏定义初探(一)
Clang 宏定义初探(一)宏的定义方法是#
define
那么在什么场景下需要用到宏呢?遇到一些重复的东西,简单的有 for(i = 0; i ; i ++) 之类的,为了减少繁琐的编码,可能使用 c #
define
FO(i,N) for(i=0;i;i++) ...
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章