在C语言中,变量是具有属性的,主要有auto、static、register、extern
auto :局部变量的自动默认属性,不需要显示声明,且存储在栈上
register:寄存器变量,请求编译器将局部变量存储在寄存器中,由于是请求,编译器有可能拒绝,所以尽管利用register对变量进行了修饰,但是并一定是存储在寄存器中的,如果变量存储在寄存器中,则不能用&取地址符。
eg:
register int j=6; //error,修饰局部变量
int main()
{
register int i=5;
printf("%x\n",&i); //error
}
static:如果修饰的是局部变量,则表明把该变量存入程序静态存储区
另外static关键字,具有作用域限定的作用,将static修饰的变量限定在声明的当前文件中。外部文件无法访问。
extern:用于声明外部定义的变量和函数
也就是说extern告诉编译器该变量或者函数,在其他文件进行了定义分配了空间,你尽管用就行了。
当然extern也用于指定编译器按照C语言标准进行程序编译。