欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

宏定义define和const的区别

程序员文章站 2024-03-22 10:28:22
...

define和const都可以用来定义常量,define的格式为:#define 标识符 字符串,const在定义常量前面,const类型定以后不能被修改,区别主要有如下几点:

1.编译器处理方式不同

 define是在预处理时进行展开,在编译时会将其全部替换,const在编译运行使使用

2.存储方式不同

 define是直接替代,因此不占用内存,在代码段存储,而const常量会占用内存,在数据段存储

3.类型不同  

 define没有类型,编译时不会做任何编译检查,const必须制定类型,编译器会进行类型检查

4.define具有边界效应

 当编译时对define的对象进行替换时,进行系统展开可能会出现优先级问题,如定义一个乘法

#define Mul(a,b) a*b
Mul( 2, 3 )     //结果为2*3 = 6
Mul( 1+2, 3 )   //结果为1+2*3 = 5
Mul( (1+2), 3 ) //结果为(1+2)*3 = 9

 由上可知,调用时需要加上括号才不会出错

5.定义域

 const定义后在常量定义域内有效,而define预处理之后则全局有效,当然也还可以取消,使用undef,如

#define  n   1
#undef n

 则只能在define和undef之间使用n,define还可以用来做条件编译,如

#ifdef  WINDOWS
   ***;
#endif
#ifdef    LINUX
  ***;
#endif
 

  

 

参考:《 C++ Primer 》

     https://www.cnblogs.com/fengkang1008/p/4746157.html

     https://www.cnblogs.com/scut-linmaojiang/p/4722338.html