zoukankan      html  css  js  c++  java
  • c 语言中宏定义和定义全局变量的区别

    1. 宏定义和定义全局变量的区别: 
    2. 1 作用时间不同。 
    3. 宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以。 
    4. 2 本质类型不同。 
    5. 宏定义的只是一段字符,在编译的时候被替换到引用的位置。在运行中是没有宏定义的概念的。而变量在运行时要为其分配内存。 
    6. 3 宏定义不可以被赋值,即其值一旦定义不可修改,而变量在运行过程中可以被修改。 
    7. 宏定义只有在定义所在文件,或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只要再使用前加一个声明就可以了。换句话说,宏定义不支持extern。 

      在C/C++中,宏定义的有效范围被规定为当前文件内有效。

        “当前文件内有效”分为两种情况,一种是定义在头文件中,另一种是定义在源文件中。

        在头文件中的宏定义随着头文件一同被包含到源文件中时,此时宏定义在该源文件中有效,当头文件中的宏定义随着该头文件一起被包含到另一个头文件中,而这另一个头文件又被另一个源文件包含,则该宏定义在最终被包含的源文件中同样有效。

        当宏定义定义在源文件中时,只在当前源文件中有效,即使当前源文件所对应的头文件被其它源文件包含,由于相应的头文件中不包含宏定义,其它源文件也不能直接使用该宏定义。(也就相当于文件内的私有成员,只能被文件内的成员使用)。

        当然在该文件中有效的含义是在宏定义语句之后的部分,同一个文件中宏定义语句之前,使用该宏是无效的。

        这就是C语言中宏定义的作用范围,在C++中无论是类内还是方法内都不建议使用宏定义,可用const成员代替,C++中类内的宏定义和方法中的宏定义都是一样的,只跟类所在的文件相关,与类相关的概念(如继承)并没有什么关系。在定义两个相同的宏名对应不同的值时,取最新定义的宏名。

        在C++类内或者方法内定义的宏不具有很好的可读性,写出来估计会被同事打死的吧。

  • 相关阅读:
    操作缓冲池
    占位图像
    GCD 常用代码
    资源共享(抢夺)
    drf版本控制 django缓存
    drf分页器
    解析器,路由控制,响应器
    drf 频率组件 META字典详情
    vue创建路由,axios前后台交互,element-ui配置使用,django contentType组件
    redis列表,字典,管道,vue安装,创建项目
  • 原文地址:https://www.cnblogs.com/focus-z/p/10299722.html
Copyright © 2011-2022 走看看