### 全局变量
作用整个项目中,使用的前提是需要在使用的文件中进行声明.全局的情况下,必须要先声明,后使用. 或者先声明.在使用的地方后面赋值也可以.
例子1:
~~~
test.c 文件
int a = 100;
~~~
使用:
~~~
extern int a; //需要声明
int main(void) {
printf("%d\n", a);
return EXIT_SUCCESS;
}
~~~
例子2:
~~~
extern int a;
int main(void) {
printf("%d\n", a);
return EXIT_SUCCESS;
}
int a = 200;
~~~
### 局部变量
作用范围是,从创建到所在函数结束. 另外函数的形参也是局部变量,它们是从右到左入栈的. 这是因为自右向左入栈顺序的好处就是可以动态的变化参数个数。通过堆栈分析可知,自左向右入栈方式中,最前面的参数会被压入栈底。除非知道参数个数,否则无法通过栈指针的相对位移求得最左边的参数。这样就无法实现可变参数。因此,C语言采用自右向左入栈顺序,主要是因为实现可变长参数形式(如:printf函数)。可变长参数主要通过第一个定参数来确定参数列表,所以自右向左入栈后,函数调用时栈顶指针指向的就是参数列表的第一个确定参数,这样就可以了。