标识符的作用范围,变量的声明和定义,auto,register自动变量,代码作用域的静态变量

文件作用范围

int total;

int max();

作用范围:从声明的位置开始,到文件末尾

函数作用范围

程序块作用范围

函数原型作用范围



变量的声明

声明:给编译器看的,告知有这么一个变量,但是此变量是在别的文件里定义的。方便编译器做类型检测

extern int a;//正确的写法 extern 声明的关键字

定义:为变量要开辟内存空间

一个全局变量可否被多次定义?不可以

一个全局变量可否被多次声明?可以


int total;

int max(int ,int);

int main(){


}


这个total 是声明还是定义呢?如果整个文件里只有一个total,就是定义,定义没有赋初始值,如果在别的文件里也有int toal=10;这个total 就退化成声明了。


对于变量,定义意味着创建,即为其分配内存

auto自动变量:

 所有自动变量的声明周期就是变量所在的大括号范围

局部变量的缺省类别



register 自动变量

变量都是在内存当中。如果能把变量放到cpu的寄存器里面,代码执行效率会更高。


register int b;

优先分配寄存器,而不分配内存,但不是绝对分配寄存器。因为cpu的寄存器是按照个数的。arm 37个,x86 17个 。个数太少的时候,是不会分配的。

static(静态变量):可以用于在程序块中定义的变量

      退出程序库后依然存在。并保留值

但不改变其作用范围,既只能在所在的程序块内被使用。

        会自动初始化,缺省值为0或'\0'

#include <stdlib.h>
int fun(void)
{
	static int a = 10; //静态局部变量,作用域本函数内,声明周期整个程序运行结束时才释放,并且a的初始化赋值一次。
	printf("%d\n",a);
	a++;
	return 0;
}
int main(){
	fun();
	fun();
	fun();
	return 0;
}

不是在代码块中

static int a = 10; //限定了作用域,a只能在本文件内使用,未初始化的全部变量是0

int fun(){


}




































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章