美文网首页
define const static

define const static

作者: 若水water | 来源:发表于2022-07-21 17:31 被阅读0次
    预编译

    预编译 是做些代码文本替换的工作。
    处理#开头的指令,比如#define宏定义#include 包含的文件代码,条件编译等,就是为编译做的预备工作的阶段。

    内存区域

    :在函数执行时,函数内部的局部变量(不包括静态局部变量)存在栈中,函数结束时这些存储空间自动被释放。
    :动态分配内存使用的区域,通过malloc或new创建,使用完之后我们需要手动释放,否则认为产生了内存泄漏。即使程序运行结束后,机器会自动释放堆。
    静态存储区:这一块的内存在程序编译时就已经存在了,主要存放静态变量,全局变量和常量等。

    局部变量和全局变量

    局部变量:他在程序运行期间不是一直存在,只有在函数调用时存在,在函数退出时销毁。
    全局变量:全局变量具有全局作用域,只需要在一个源文件中定义就可以在所有cpp文件中使用,通过extern关键字声明。
    静态局部变量:静态局部变量只在初次调用的时候初始化,直到程序关闭。静态局部变量的作用域是局部的,只对定于他的函数可见。
    静态全局变量:静态全局变量与全局变量一样具有全局作用域,但是有所不同的是,因为有static关键字修饰,所以不能被其他cpp文件extern,即使在其他cpp文件中出现同名变量,也只是另一个全新的个体。

    define 和const
    • define 是宏定义,是在预编译阶段就进行了文本替换,没有类型检查,也不分配空间,所以程序中不可修改(因为没有内存地址)
    • const 是在编译阶段处理,有类型检查,会有错误提示
    • define 可以定义一些简单的函数,而const 只能定义常量
    • 大量的使用宏,会造成编译时间久
    • 苹果官方不推荐我们使用宏,推荐使用const常量
    static 和 const
    • static 修饰的局部变量,改变了变量的存储区域,本来局部变量是放在栈区,超出其作用域(当前函数或代码块)就会被释放,但是static修饰后,存储区域放在了静态区(全局数据区)(编译时就分配了内存),程序结束时才会被释放,但是其作用域还是函数或代码块内部。下次访问的还是同一内存的数据。
    • const 修饰的变量为只读的,不可以修改。当其修饰全局变量时,可以通过extern 关键字 让所有文件都可以访问。
    • static 和 const 一起使用,是为了将常量的作用域限制在当前声明的文件内,其他文件不可以访问。(不可以使用extern 暴露出去,不然会报错)

    参考:
    https://www.csdn.net/tags/MtjaAgxsODU5NzYtYmxvZwO0O0OO0O0O.html

    相关文章

      网友评论

          本文标题:define const static

          本文链接:https://www.haomeiwen.com/subject/lbwuirtx.html