C语言中的常量
在C
语言里面,一般有2个常量的使用,一个是说过的define
另外一个就是前两次用到的const
,下面就分别来说说。
const
const
是C/C++
中的一个关键字(修饰符), const
一般用来定义一个常量, 既然叫做常量, 即就意味着这个值后面就不能修改了。
举个简单的计算面积的例子:
1 | /*beginner/constant/constant1.c*/ |
下面在看看define
这个常量定义。
#define
而define
,其实正常的称呼应该叫做宏定义,是一条预编译指令, 编译器在编译阶段会将所有使用到宏的地方简单地进行替换。如下图所示 :
比较
所以const
和 define
都能定义一个常量,都能实现修改值修改一次, 则所有用上该常量的地方都同步改值,一句代码都不用改。
这样就可以得到下面的优点:
- 使代码更易维护
- 提高代码的效率
不过除了这些相同点,还是区别的,听我慢慢道来。
下面的有点小超纲,看不懂也没有关系的,🆙。
const
定义常量是汇编的角度来看,只是给出了对应的内存地址,而不是象#define
一样给出的是立即数,所以,const
定义的常量在程序运行过程中只有一份拷贝,而#define
定义的常量在内存中有若干个拷贝
编译器通常不为普通const
常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率比宏定义要高。既然宏定义能做的事const
都能做, 那宏还有什么存在的必要么?
存在即合理, 既然宏定义还没被淘汰, 那必然有它存在的道理.
宏能做到const
不能办到的事.
- 宏能定义函数
- 宏还能根据传入的参数生成字符串
1 | /*beginner/constant/constant3.c*/ |
这个功能相当的赞,可以替换很多string的函数了。
编译运行
直接输入make
就可以了。
1 | #beginner/constant/Makefile |
运行输出如下:
1 | $ ./constant1 |