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

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

     


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

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


     

     

     

     

  • 相关阅读:
    SVN的安装与配置
    nginx之location配置详解及案例
    查看三种MySQL字符集的方法(转)
    JAVA_OPTS设置
    vi/vim 添加或删除多行注释
    Linux 下查看字体
    linux 安装中文字体
    Linux 压缩某个文件夹命令
    Navicat Premium 12.1.16.0安装与激活
    Rsync + sersync 实时同步备份
  • 原文地址:https://www.cnblogs.com/tyyhmtyyhm/p/9005840.html
Copyright © 2020-2023  润新知