条款 02

一,宏定义的基本用法

1,简单的宏定义

#define <宏名>  <字符串>
例:#define PI 3.1415926


2,带参数的宏定义

#define <宏名> (<参数表>) <宏体>
例: #define sum(a, b) (a)+(b)

二,使用#define带来的问题

例如有下面这个宏定义:

#define  MAX_VAL  1.234

名称MAX_VAL从未被编译器看到过,因为在编译器处理源代码之前,它就被预处理器移走了。因此,MAX_VAL有可能没进入符号表内,当我们使用这个常量获取一个编译错误信息时,可能会带来困惑,因为这个错误信息也许会提到1.234但不是MAX_VAL。因此我们要以编译器来替换预处理器,或许#define不被视为语言的一部分。


三,使用const或enum来替换#define

例如有下面的常量定义:

const  int  numSize  =  20;

作为一个语言常量,numSize肯定会被语言看到,当然也就会进入符号表内。


四,使用inline函数替换#define

例如:

#define sum(a, b) a+b
使用宏定义的函数,看起来像函数,但是它的调用与普通的函数调用机制是不相同的。宏定义的函数,这并不是真正的函数,调用函数时没有参数传递,只是简单的使用宏名替换宏体,进行简单的文本替换,并不像普通的函数调用那样有一个参数传递的过程。应当使用下面的函数定义,取代上面的宏定义:
inline int sum(int a, int b){
    return a + b;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值