在使用外部链接和内部链接的静态变量时,为了防止同名变量的覆盖(防止编译器混淆声明与定义),我们按声明的位置把变量分为:
外部变量(external variable):,把变量的定义性声明放在了所有函数外面的变量内部变量:自动变量,寄存器变量,静态变量 #include<stdio.h> int num = 1; // 外部链接的静态变量 static char ch = 'a'; // 内部链接的静态变量 int main(){ extern int num; // 该语句为声明而非定义(再次声明了num外部链接的静态变量) extern char ch; /* int num; 该语句为定义,而非声明(定义了一个同名为num的局部变量) */ /* char ch; 该语句为定义,而非声明(定义了一个同名为ch的局部变量) */ return 0; }总结: 函数内使用extern,那么“外部”是相对于函数的,也就是指该文件的函数外 函数外使用extern,那么“外部”是相对于文件的,也就是指该文件外
