宏子程序和内联子程序
最后更新于:2022-04-02 04:15:21
[TOC]
## 错误的宏
bad:
```
#define Cube(a) a*a*a
```
a 可以为 a+1
bad:
```
#define Cube(a) (a)*(a)*(a)
```
如果在使用`cube()`的表达式里含有比乘法运算符优先级更高的运算符,那么`(a)*(a)*(a)`也会再次失效。
good:
```
#define Cube(a) ((a)*(a)*(a))
```
### 可用给子程序命名的方法来给展开后代码形同子程序的宏命名
## 宏子程序在使用上的限制
C++取代宏的方案:
* const 可以用于定义常量
* inline 可以用于定义可被编译为内嵌的代码( inline code)的函数
* template 可以用于以类型安全的方式定义各种标准操作,如min、max等
* enum 可以用于定义枚举类型
* typedef 可以用于定义简单的类型替换
除非万不得已,否则是不会用宏来代理子程序
';