c中 const 与 #define 的区别

1.编译器处理方式不同 
define宏是预处理阶段展开 
const常量是编译运行阶段使用

define是宏定义,程序在预处理阶段将用define定义的内容进行替换,因此程序运行时常量表中并没有用define定义的常量,系统不为其分配内存。 
const常量是编译运行时的常量,系统为其分配内存。

2.类型跟安全检查不同 
define宏没有类型,不做任何类型检查,仅仅是展开 
const常量有具体的类型,编译运行时会执行类型检查

3.存储方式不同 
define仅仅是展开,有多少地方使用就展开多少次,不分配内存 
const常量会在内存中分配(可以在堆中也可以在栈中)

4.const可以节省空间,避免不必要的的内存分配。

define注意“边缘效应”, 
例:

#define N 2+3 /*N的值是5 */
int a = N/2,

/*在编译时我们预想a=2.5,实际打印结果是3.5 
原因是在预处理阶段,编译器将a=N/2处理成a=2+3/2,这就是define宏的边缘效应;* /
所以我们应该写成

#define N (2+3)

使用const的好处

常数比较使用

if (常数c == 变量x)的方式  /*在几千行代码中,经常会漏符号

                                                      例如  if (变量x = 常数c )编译直接通过了;到时程序明明没错,而得出结果却是错的;

                                                       若if(常数c = 变量x)会报ERROR ,节省查代码的时间。*/

代替

if (变量x == 常数c )方式。

 

 

 

 

你可能感兴趣的:(C基础)