• 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常量是由编译器处理的,提供类型检查和作用域检查;

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

     


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

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


     

     

     

     

  • 相关阅读:
    热更新--动态加载framework
    封装framework注意点
    zip压缩和解压缩
    iOS 网络请求数据缓存
    tomcat服务器访问网址组成
    iOS--支付宝环境集成
    线程10--NSOperation的基本操作
    线程9--NSOperation
    线程8--GCD常见用法
    线程7--GCD的基本使用
  • 原文地址:https://www.cnblogs.com/tyyhmtyyhm/p/9005840.html
Copyright © 2020-2023  润新知