变量属性
C语言中:
变量可以有自己的属性, 在定义变量的时候可以加上 “属性” 关键字
“属性”关键字指明变量的特有意义
语法:
properey type var_name;
变量属性的分析1:auto关键字(自动变量)
auto是C语言中局部变量的默认属性
auto修饰的变量将被存储于栈上
编译器默认所以的局部变量都是auto的
int main()
{
int i; // 局部变量默认属性为 auto
auto int j; // 显式声明 auto 属性
return0;
}
变量属性的分析2:register关键字(寄存器变量)
register关键字指明将局部变量存储于寄存器中
register只是请求寄存器变量, 但不一定请求成功
register变量必须是CPU寄存器可以接受的值
不能用&运算符获取register变量的地址
全局变量不能声明为register变量
#include <stdio.h>
register int i; // error
int main()
{
register char var;
printf("0x%08x", &var); // error
return 0;
}
变量属性的分析3:static关键字(静态变量)
static关键字指明变量的静态属性
-static修饰的局部变量存储在程序静态区static关键字同时具有作用域限定符的意义
-static修饰的全局变量作用域只在声明的文件中
-static修饰的函数作用域只在声明的文件中
#include <stdio.h>
int g_v; // 全局变量, 程序的任意地方均能访问
static int sg_v; // 静态全局变量, 只有当前文件中可以访问
int main()
{
int var; // 局部变量, 在栈上分配空间
static int svar; // 静态局部变量, 在静态区分配空间
retur 0;
}
变量属性的分析4:extern关键字(外部变量)
extern用于声明 “外部” 定义的变量和函数
-extern变量在文件的其他地方分配空间
-extern函数在文件的其他地方定义extern用于 “告诉” 编译器用C方式编译
extern "C"
{
int f(int a, int b)
{
return a + b;
}
}