auto, register, static分析

C语言中的变量可以有自己的属性
在定义变量的时候可以加上“属性”关键字
“属性”关键字指明变量的特有意义

auto:

  • static修饰的局部变量存储在程序静态区
  • static的另一个意义是文件作用域标示符

static:

  • static关键字指明变量的“静态”属性
  • static关键同时具有“作用域限定符”的意义
  • static修饰的局部变量存储在程序静态区
  • static的另一个意义是文件作用域标示符
  • – static修饰的全局变量作用域只是声明的文件中
  • – static修饰的函数作用域只是声明的文件中

register:

  • register关键字指明将变量存储于寄存器中
  • register只是请求寄存器变量,但不一定请求成功
  • register变量的必须是CPU寄存器可以接受的值
  • 不能用&运算符获取register变量的地址

小结:

  • auto变量存储在程序的栈中,默认属性
  • static变量存储在程序静态区中
  • register变量请求存储于CPU寄存器中
#include <stdio.h>

int main()
{
    auto int i = 0;
    register int j = 0;
    static int k = 0;

    return 0;
}

可以编译过去

#include <stdio.h>

auto int i = 0;
register int j = 0;

int main()
{

    static int k = 0;

    return 0;
} 

编译出错,全局变量不能是auto和register

test.c文件

#include<stdio.h>

extern int test2_g;

int main()
{
    printf(“%d\n,test2_g”);
}

test2.c文件
int test2_g 1;

gcc test.c test2.c

运行 ./a.out
打印 1

如果test2.c为
static int test2_g 1;
则编译报错,static把test2_g限定在test2文件中使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值