存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类:

  • auto
  • register
  • static
  • extern

    auto(默认)

    所有局部变量默认的存储类。auto只能修饰局部变量(只能在函数内使用)

    register(寄存器)

    将变量定义为寄存器变量而不是ram变量(这意味着变量的最大尺寸等于寄存器的大小(通常是一个字节),且不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置))

  • 寄存器用于需要快速访问的变量

  • 使用了register不一定就存储寄存器中,只是可能存储在寄存器中,取决于硬件和实现的限制。

    static(静态)

  • static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。

  • static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。

    extern(全局)

  • extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。

  • 当您使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
  • 可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。

声明全局函数:在函数声明前加上关键字
声明全局变量:在其他需要使用变量的地方再写一遍变量定义,并在``前加上关键字extern int a;是全局声明,而不是定义全局变量。定义是在函数外int a