对C语言宏定义的一些总结
符号常量与const常量
符号常量通俗地讲就是“替换”,即用一个标识符来替代常量,又称为“宏定义”或者“宏替换”。其格式如下
1 | #define 标识符 常量 |
例如下面这个例子是把圆周率pi设置为3.14,注意末尾不加分号
1 | #define pi 3.14 |
于是在程序中凡是使用pi的地方将在程序执行前全部自动替换为3.14
另一个定义常量的方法是使用const,其格式如下:
1 | const 数据类型 变量名 = 常量; |
仍然用pi来举例:
1 | const double pi = 3.14 |
define的其他用法
define除了可以定义常量外,其实可以定义任何语句或片段。其格式如下:
1 |
例如可以写一个这样的宏定义:
1 |
这样就可以直接使用ADD(a,b)来代替a + b的功能:
1 |
|
输出结果:
1 | 8 |
宏定义的陷阱
为什么要在上面加那么多括号呢?直接#define ADD(a, b) a + b不可以吗?或者,为保险起见,是否能写成#define ADD(a, b) (a + b)?实际上必须加那么多括号,这是因为宏定义是直接将对应的部分替换,然后才进行编译和运行。因此像下面这种程序,就会出问题:
1 |
|
输出结果:
1 | 4 |
这个结果跟我们预想的结果可能不太一致,许多人可能觉得应该是5才对。实际上这就是宏定义的陷阱,它把替换的部分直接原封不动替换进去,导致CAL(a + 1)实际是(a + 1 * 2 + 1),也就是4,而不是((a + 1) * 2 + 1)
Comments
Comment plugin failed to load
Loading comment plugin