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文件中使用