zoukankan      html  css  js  c++  java
  • 深刻理解----修饰变量----关键字

    1.extern关键字

    • 基本解释:引用一个全局的量,
      • extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

    使用介绍

    ①全局的变量

    • 在一个源文件里定义了一个变量,int i = 0;
    • 在另一个文件里用 extern int i;就可以访问同一个变量i;

    ②全局的常量

    • 在一个源文件里定义了一个常量,int const i = 0;
    • 在另一个文件里用 extern const int i;就可以访问同一个常量i;

    ③坑

    • 不能有重复定义的全局变量----不能在两个文件定义一样的变量
      • 即不能在两个文件中,int i = 0;或者int const i = 0;
    • 如果全局变量被修饰为全局常量,那么也应该应用全局常量---加const

    2.宏定义 #define

    • 宏定义又称为宏代换、宏替换,简称“宏”。

    说明:

    - (1)宏名一般用大写
    - (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
    - (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
    - (4)宏定义末尾不加分号;
    - (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
    - (6)可以用#undef命令终止宏定义的作用域
    - (7)宏定义可以嵌套
    - (8)字符串" "中永远不包含宏
    - (9)宏定义不分配内存,变量定义分配内存。
    - (10)宏定义不存在类型问题,它的参数也是无类型的。
    

    有参宏定义中#的用法

    • 加双引号
        #define STR(str) #str
        #用于把宏定义中的参数两端加上字符串的""
        比如,这里STR(myname)会被替换成"myname"
    

    有参宏定义中##的用法

    • 拼接
      #define WIDE(str) L##str
      则会将形参str的前面加上L
      比如:WIDE("abc")就会被替换成L"abc"
      如果有#define FUN(a,b) vo##a##b()
      那么FUN(id ma,in)会被替换成void main()
    
    宏定义的值,在程序中是不可改变的值,而且在引用的时候会分配临时内存空间

    3.定义全局变量

    • 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。
    • 当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。
    ①全局变量当没有其他关键字修饰时。他定义的值可以在其他地方更改,但是好处是只分配一份内存空间。

    ②当全局变量被const关键字修饰时。他定义的是常量,他的值不能在其他地方更改,而且在内存中也只占用一份内存空间。

    4.const关键字

    • const用法主要是防止定义的对象再次被修改,定义对象变量时要初始化变量。节约内存空间,

    5.static关键字

    • 首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0.

    ①.修饰局部变量

    • 不改变局部变量作用域
    • 延长了局部变量的寿命,可以让局部变量在整个程序运行过程中只有一份内存,且只会初始化一次

    ②.修饰全局变量

    • 让这个全局变量仅限于当前文件能访问(哪个文件:定义这个全局变量的文件)

    6.static 关键字 搭配 const 关键字

    • 不能被外界引用,而且是常量
    • 防止重复定义
  • 相关阅读:
    2019重新起航:搭建个人博客
    Alibaba Nacos:搭建Nacos平台
    ELK:使用docker搭建elk平台
    SpringBoot:关于默认连接池Hikari的源码剖析
    git常用命名:自用,持续更新
    linux常用命名汇总:自用,持续更新
    升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x
    Python学习第十五课——类的基本思想(实例化对象,类对象)
    Python学习第十三课——re(正则表达式)模块
    Python学习第十四课——面向对象基本思想part1
  • 原文地址:https://www.cnblogs.com/ShaoYinling/p/4743206.html
Copyright © 2011-2022 走看看