C++学习笔记——预处理命令

宏定义命令#define

1、不带参数宏定义

用来产生与一个字符串对应的常量字符串,格式如下:

#define 宏名 常量串

预处理后,文件中凡出现该字符串均用其对应的常量串代替,替换的过程成为宏替换或宏展开。宏替换只是字符串和标识符之间的简单替换,预处理本身不做任何数据类型的和合法性检查,也不分配内存空间。

2、带参数的宏定义

带参数的宏定义的形式很想定义一个函数,格式为:

#define 宏名(形参表) 表达式串

例如:

#define s(a,b) (a)*(b)/2

程序中可使用s(a,b),预处理后产生中间文件,其中s(a,b)被替换成(a)*(b)/2。注意,宏定义时形参通常要用括号括起来,否则容易导致逻辑错误。

例如,如果定义:

#define s(a,b) a*b/2

那么程序中的s(7+5,4+2)就会被宏展开为7+5*4+2/2,不符合程序员定义的真正的意图。

带参宏定义形式上想定义函数,但它与函数有本质不同,宏定义仍然只是产生字符串替代,不存在分配内存空间和参数传递。

posted @ 2015-10-11 13:11  TensinKiKi  阅读(176)  评论(0编辑  收藏  举报