C宏--智者的利刃,愚者的恶梦
日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]-
水平不高不低的C++程序员最喜欢挂在嘴上的一句话就是:C宏,万恶之首,错误的开端,应该被废弃。
请注意,我用了一句不敬的修饰语“水平不高不低的”。为什么这么说?因为水平低都插不上话,都在在静静地听老前辈布道呢。水平高的,比如Bane Stroustrup老人家,也只是说若干种场合下C++语言能够提供比C macro更好的解决方案,而没有完全否定C macro的价值。但是话就怕传来传去,一传就走样。久而久之,就被传成上面那句话。其实说来也很好笑:java程序员经常说java比C++好,说C++手动释放内存老搞内存泄漏;C++程序员便反驳说,那是你水平低不会用。但是谈到C宏,水平不高不低的C++程序员居然也走java的老路了——明明是自己不会用,自己知道的少,却把责任推卸到C宏上。你自己笨我管不着,但是错误的言论如果误导后人就不好了吧。
本文就举几个简单的使用C宏的例子,如果这些例子用C++不用宏的语法能更好的解决,那么你一定要回复告诉我,这样下次我就不乱说话了。否则,笑笑很生气,后果很严重。:)
例一、用C宏,书写代码更简洁这段代码写网络程序的朋友都很眼熟,是Net/3中mbuf的实现。struct mbuf
{
struct m_hdr mhdr;
union {
struct
{
struct pkthdr MH_pkthdr; /* M_PKTHDR set */
union
{
struct m_ext MH_ext; /* M_EXT set */
char MH_databuf[MHLEN];
} MH_dat;
} MH;
char M_databuf[MLEN]; /* !M_PKTHER, !M_EXT*/
} M_dat;
};
上面的代码,假如我想访问最里层的MH_databuf,那么我必须写M_dat.MH.MH_dat.MH_databuf; 这是不是很长,很难写呀?这样的代码阅读起来也不明了。其实,对于MH_pkthdr、MH_ext、MH_databuf来说,虽然不是在一个结构层次上,但是如果我们站在mbuf之外来看,它们都是mbuf的属性,完全可以压扁到一个平面上去看。所以,源码中有这么一组宏:
- [1] [2] [3] [4] 下一页
-
- C宏--智者的利刃,愚者的恶梦 相关文章:
- ·C宏--智者的利刃,愚者的恶梦
- C宏--智者的利刃,愚者的恶梦 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·用c#监控网络流量
- ·C#编写的windows计算器-源代码
- ·C #中的几个线程同步对象方法
- ·飞机订票系统设计
- ·C/C++笔试、面试题目大汇总
- ·《俄罗斯方块》程序编写详解
- ·Windows API-GDI入门基础知识详解(2)
- ·socket编程原理
- ·打字游戏
- ·七年IT奋斗纪实及感悟
- ·无废话C#设计模式之九:Proxy
- ·牛顿和拉格朗日插值算法
- ·VC++动态链接库编程之MFC扩展 DLL
- ·C# 操作文件
- ·如何用C#编写文本编辑器
- ·c#操作word表格
- ·编程特例篇——LOGO语言
- ·Raw Socket(原始套接字)实现Sniffer(嗅探)
- ·C#实现窗口最小化到系统托盘
- ·C# 学习使用ErrorProvider
特别推荐
- ·C#程序开发中的常用函数汇总
- ·C#数据库操作的三种经典用法
- ·C/C++笔试、面试题目大汇总
- ·Beej的网络socket编程指南
- ·socket编程原理
- ·C语言的常用库函数使用方法分析及用途
- ·在C语言中如何处理时间和日期
- ·C++设计模式之Singleton
- ·VC++动态链接库编程之MFC扩展 DLL
- ·TCP/IP网络重复型服务器通信软件的设计
- ·DirectX游戏开发入门
- ·经典与现代的结合:在MFC中集成RAD .NET框架
- ·Windows API-GDI入门基础知识详解(2)
- ·Visual C++ 入门精解
- ·C#基础概念二十五问
- ·用C#实现pdf文件的完整性验证
- ·成为嵌入式程序员应知道的0x10个问题
- ·TCP/IP编程实现远程文件传输
- ·几个C#编程的小技巧
- ·C# 编码规范和编程好习惯
