再看C/C++中的宏(Macros)

本文探讨了C/C++中宏的用途,除了常见的头文件包含处理和定义类似函数外,还强调了宏作为代码生成器的角色。通过引用Graham Paul的《ANSI Common Lisp》,指出宏可以用于编写生成程序的程序,这一思想在MFC的源码中有所体现。文章鼓励读者深入研究MFC宏的使用和Lisp编程。
摘要由CSDN通过智能技术生成
通常我们对C/C++中宏的理解不外乎两点:
  一, 用来处理头文件的重复包含。
  二, 用来定义类似的函数的宏。
 
对于第一点,这个大家都能很好理解。第二点:用来定义类似的函数的宏也常常见到,比较经典的是:
  define max(a,b)  (a>b)?(a):(b)
 
类似于这样的作法主要是想绕过类型检查,这样无论a和b是什么类型之要能用">"运算符来比较的便可以使用宏来代替反复写max函数不同版本。但这样做明显有一个问题:我们缺少了类型保护,这对于大型应用程序来说是非常恐怖的一件事。(但也不尽然)。
C++中引入了范型(Generic Method)来解决这个问题。
 
但我今天想表达的全然不是上面这些,C/C++中的宏还有一个用处:
   代码生成器(Code Generator)。

也许你对此不屑,坦白地讲先前我也是如此。这个很明显嘛,上学的时候我都知道了,比如上面的例子,当你写出如下的代码:
   int iMax = max(5,6);
编译器会为你“自动”生成代码:
   int iMax = (5>6)?(5):(6);
确实如此,编程三年以来,我确实也是这样的理解的。直到最近在看Graham Paul的《ANSI Common Lisp》,前言中有这样一句话࿱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值