C语言中const 和#define的区别

Const用来定义常变量,占用存储单元,带类型。

#define是宏定义语句,它是预编译指令,只是用符号常量代替一个字符串。

区别:

(1) 编译器处理方式不同

define宏是在预处理阶段展开。

const常量是编译运行阶段使用。

(2) 类型和安全检查不同

define宏没有类型,不做任何类型检查,仅仅是展开。

const常量有具体的类型,在编译阶段会执行类型检查。

编译器可以对const常量进行类型安全检查。而对前者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

(3) 存储方式不同

define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配存储单元。

const常量系统会给其分配存储单元(可以是堆中也可以是栈中)。

(4) 系统内存占用

对于const 变量,系统只给了一个相应的内存地址,而#define则是给出了一个立即数。因为const变量是存放在内存的静态区域中,所以在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏在程序运行过程中所消耗的内存要比const变量的大得多。

永不止步步 发表于02-18 09:39 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345377个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号