社区
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
...全文
997
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写文章
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)
预处理指令的隐藏技巧:#
define
与#include的高级
用法
本文聚焦C和C++编程中#
define
与#include预处理指令的高级
用法
。介绍了#
define
的宏函数、字符串化和连接操作、条件编译中的宏定义,以及#include的头文件保护、包含路径设置、条件包含。还给出跨平台应用的综合案例,合理运用可让代码更灵活高效。
条款02:尽量以 const, enum, inline替换 #
define
本文详解《Effective C++》条款02,阐述为何应优先使用const、enum和inline替代#
define
。重点对比二者在类型安全、作用域、调试支持、符号表可见性及目标代码优化等方面的差异;分析字符串常量、类专属常量(含enum hack)及宏函数的替代方案;强调const提供类型检查与调试能力,enum适用于编译期整型常量,inline解决宏函数的安全与语义缺陷。
#
define
_CRT_SECURE_NO_WARNINGS
本文探讨了在Visual Studio Code和Visual C++开发环境中添加#
define
_CRT_SECURE_NO_WARNINGS的重要性,以避免遇到难以理解的警告信息,提供了解决方案和实践建议。
#
define
INVSQRT2 0.707106781 平方根倒数速算法
本文探讨了高速平方根逆运算的实现方法,包括二分法、牛顿迭代法及卡马克使用的
神秘
常数法,并对比了不同方法的性能。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章