C 存储类 的 作用域 连结性

发布于 2024-01-18  13 次阅读


int name;                            //变量声明
static float total;                  //变量声明
float function_a (int arg1);         // 函数声明

int func_d (int *arg2)               //函数定义
{
register int count;                  //变量声明
/* some code resides here */
        {
          int age, high;             //变量声明
        /* some code resides here */
        }
        {
          static int sum;            //变量声明
        /* some code resides here */
        }
}

局部变量包含:
auto 存储类是所有局部变量默认的存储类 如10
register 定义存储在寄存器中而不是 RAM 中的局部变量 如7

「函数定义」时的参数、函数内声明的变量 这些都是只是在函数内生效的局部变量
所有局部变量的「作用域 Scope」都是声明所在的「block」
局部变量其实就是“作用域是block”的变量


static 类似于「全局变量」 指示编译器在程序的生命周期内保持局部变量的存在 不需要在每次它进入和离开作用域时进行创建和销毁
分两种情况
static 存储类 (static storage class) 这个只存在于函数外 如1 声明后可以在当前文件的剩下任何部分使用
static 关键字 如2 对于函数外的变量加了这个关键字 就会让「連結性」(linkage)变为internal


作用域 Scope : 有block file prototype ; 所有「局部变量」一律是block ; 所有「全局变量」一律是file ; 所有「函数声明」一律是prototype

连结性 linkage : 相当于是对「file」作用域的细分 细分为 external internal ;相当于是是否允许当前文件的「全局变量」被其他文件读取; 加了「static 关键字」就变成internal 否则全都是external


信任是利益的武器,捅伤别人,保护自己。