宏定义

来源:互联网 发布:扫码 销售 软件 编辑:程序博客网 时间:2024/06/12 12:57

数值宏常量

#define TIMEOUT 500

从本行宏定义开始,以后的代码就就都认识这个宏了;可以把任何东西定义成宏
在以后在定义一些宏常数的时候用 const代替,编译器会给 const 修饰的只读变量做类型校验,减少错误的可能。但一定要注意 const修饰的不是常量而是 readonly 的变量,const 修饰的只读变量不能用来作为定义数组的维数,也不能放在 case 关键字后面。
字符串宏
定义一年有多少秒:
#define SEC_A_YEAR 60*60*24*365
你有没有考虑在 16 位系统下把这样一个数赋给整型变量的时候可能会发生溢出?
#define SEC_A_YEAR ( 60*60*24*365) UL
到底需不需要呢?
定义一个宏函数,求 x 的平方:
#define SQR (x) x * x
x为10+1时会如何?
#define SQR(x) ((x)*(x))
求两个数的和:
#define SUM (x) (x) +(x)
x为3*5时会如何?
#define SUM(x) ((x)+(x))

所以最外层的括号最好也别省了。我说过 define 是个演技高超的替身演员,但也经常耍大牌。 要搞定它其实很简单,别吝啬括号就行了。
宏函数被调用时是以实参代换形参。而不是“值传送”。
undef 是用来撤销宏定义

条件编译

#if 常量表达式程序段 1#else程序段 2#endif

它的功能是,如常量表达式的值为真(非 0),则对程序段 1 进行编译,否则对程序段 2 进行
编译。因此可以使程序在不同条件下,完成不同的功能。
至于#elif 命令意义与 else if 相同, 它形成一个 if else-if 阶梯状语句, 可进行多种编译选择

未完,待更

0 0
原创粉丝点击