1. #define命令
#define命令(#define directive)是C/C++语言中的一个宏定义命令(Macro directive),它用来将一个标识符(identifier)定义为一个字符串(token string),该标识符被称为宏名,被字符串称为替换文本,这里的“字符串”可以是常数,表达式,也可以是字符串,其中又分为带参数的版本和不带参数的版本。
1.1 无参数的宏定义
无参数宏定义就是简单的做替换,那么,最简单的用法就是下面这样,定义一个长和宽。
#define WIDTH 80
#define LENGTH ( WIDTH + 10 )
在代码中,每一次出现
就会被替代为常数
,每一次出现
就会被替代为
,然后
又被替代为
,宏定义允许嵌套,在宏定义的字符串中可以使用已经被定义的宏名,在预处理的过程中会被预处理器层层替代。
var = LENGTH * 20;
如上这个表达式经过预处理之后的结果就是:
var = ( 80 + 10 ) * 20;
❗ 这里有一个值得注意的点,如果“字符串”里面是一个表达式,那么一定要注意给这个表达式添加一个括号,不然可能会造成误解和误用,上面这个例子中,如果我们去掉括号,最后的结果就和我们的本意不相符了。
#define WIDTH 80
#define LENGTH WIDTH + 10
如上这个表达式经过预处理之后的结果就是:
var = 80 + 10 * 20;
❗ 还有一种特殊情况:
#define NOTHING
这里的有标识符,但是是一个空的字符串,这个的效果就是在原文件中删除这个标识符,但是值得注意的是这个标识符是可以通过
命令测试的。
1.2 有参数的宏定义
带参数的宏定义类似于一个函数。和函数类似,在宏定义中的参数被称为形式参数(Parameter),在