C++笔记020:const 和 #define 的对比

 


 原创笔记,转载请注明出处!

点击【关注】,关注也是一种美德~


 

第一const与#define的相同点

C++中的const常量类似于宏定义

const  int  c = 5  ≈  #define  c  5

const是用来替换#define的一个手段。

程序一:

int main()

{

const int a=10;

printf("a=%d\n",a);

return 0;

}

程序二:

#define a 10

int main()

{

//const int a=10;

printf("a=%d\n",a);

return 0;

}

 

这两个程序运行结果都是一样的,都是定义一个常量a,注意#define最后是没有分号的。下面这两个程序也说明了这一点:

#define a 10

#define b 10

int main()

{

int arr[a+b];

 

system("pause");

return 0;

}

编译成功!

#define a 10

#define b 10

int main()

{

int arr[a+b];

 

return 0;

}

编译成功!

 

第二const与#define的不同点

看程序:

 

现在a是一个宏定义,我们知道宏定义,凡是变量a所在的地方预处理编译器都进行替换,也就是将a替换为10。因此在函数fun1中定义的a在函数fun2中是可以使用的,也就是说宏定义是没有作用域检查的。运行可以通过。

那么如果想将a的作用域限制在函数fun1中,可以使用“卸载宏”或者称作“取消宏”  #undef  来达到目的。

#undef  a  —— 此处往下取消a的宏定义;

#undef     —— 此处往下取消所有宏定义。

 

在看看const作用域检查,我们在fun1中定义变量b,其作用域就局限在fun1函数中了,在fun2函数中是不可用的,可以取消  //printf("b=%d\n",b); 的注释,发现编译时错误的!

 

结论

C++中的const常量与宏定义不同

const常量是由编译器处理的,提供类型检查和作用域检查;

宏定义由预处理器处理,单纯的文本替换。

 


原创笔记,转载请注明出处!

更多精彩请关注微信公众号:依法编程


 

 

 

 

posted @ 2018-05-07 23:34  tyyhmtyyhm  阅读(169)  评论(0编辑  收藏  举报