const 与 #define的区别

在c程序中,const的用法主要有定义常量、修饰函数参数、修饰函数返回值等3个用处;

在c++程序中,它还可以修饰函数的定义体,定义类中某个成员函数为恒态函数,即不改变类中的数据成员


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


2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
在c++程序中只使用const常量而不使用宏常量

“尽量用编译器而不用预处理”,因为#define经常被认为好象不是语言本身的一部分
#define  TEMP  20 
编译器会永远也看不到 TEMP 这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是 TEMP 不会加入到符号列表中。

3)const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了
const常量存在于程序的数据段,#define常量存在于程序的代码段。

你可能感兴趣的:(const 与 #define的区别)