1. extern关键字
用extern关键字告诉编译器: 这个变量我后面定义了,你先别急着报错!
#include <stdio.h>
void func();
void func()
{
extern count;
count++;
}
int count = 0;
int main()
{
func();
printf("%d\n", count);
return 0;
}
这里就是在函数后声明全局变量count , 如果不加extern会报错.
2. 不要大量的使用全局变量
- 使用全局变量会使你的程序占用更多的内存, 因为全局变量从被定义时候开始,直到程序退出后才被释放.
- 污染命名空间,虽然局部变量会屏蔽全局变量, 但是这样一来也会降低程序的可读性,人们往往很难一下子判断出来每个变量的含义和作用范围。
- 提高了代码的耦合性,牵一发而动全身,时间久了,代码长了,不知道全局变量被哪些函数修改过。
3.作用域
- 定义: 当变量被定义在程序的不同位置时,它的作用范围是不一样的,这个作用范围就是我们所说的作用域
- C语言编译器可以确定4种不同类型的作用域:
– 代码块作用域
–文件作用域
–原型作用域
–函数作用域
1. 代码块作用域(block scope)
代码块: 就是被花括号 {} 括起来的部分。 函数是一个代码块, 函数中的循环签到的花括号也是代码块。
- 在代码块中定义的变量,具有代码块作用域。作用范围是从变量定义的位置开始,到标志该代码块结束的右大括号 ‘ } ’处。
- 尽管函数的形参不在大括号内定义,但其同样具有代码块作用域,隶属于包含函数体的代码块。
#include <stdio.h>
int main(void)
{
int i = 100;
{
int i = 110;
<