zoukankan      html  css  js  c++  java
  • 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 ",a);

    return 0;

    }

    程序二:

    #define a 10

    int main()

    {

    //const int a=10;

    printf("a=%d ",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 ",b); 的注释,发现编译时错误的!

     

    结论

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

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

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

     


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

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


     

     

     

     

  • 相关阅读:
    [android]Xutils具体介绍
    2015:WPS笔试-Android开发岗位
    BZOJ1355: [Baltic2009]Radio Transmission
    HDU 1421 搬寝室 (线性dp 贪心预处理)
    【独立开发人员er Cocos2d-x实战 009】Cocos2dx 菜单项CCMenu使用
    Error configuring application listener of
    SVN分支/合并原理及最佳实践
    SVN创建分支/合并分支/切换分支
    如何转载别人的文章
    让div自适应浏览器窗口居中显示
  • 原文地址:https://www.cnblogs.com/tyyhmtyyhm/p/9005840.html
Copyright © 2011-2022 走看看