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,不符合程序员定义的真正的意图。
带参宏定义形式上想定义函数,但它与函数有本质不同,宏定义仍然只是产生字符串替代,不存在分配内存空间和参数传递。