extern只是聲明,不是定義。
static卻是是定義
#include <stdio.h>
int a=3;
int b=4;//非晶態全局變量,當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同 //一源程序的其它源文件中不能使用它
static int d=5;//靜態全局變量
extern int c;//提示編譯器c在別的文件中定義,這里先拿來用
int main(void){
printf("a is %p\n",&a);//這個a是全局變量a
static int a;//重新定義了a
printf("static a is %p\n",&a);//地址發生了變化
printf("b is %p\n",&b);
extern int b;//這個b還是全局變量b,不過沒這樣用extern的,這里只是測試一下,說明沒有語法錯誤
printf("extern b is %p\n",&b);//地址沒變
printf("c is %d\n",c);//能通過編譯,但是如果在鏈接的時候,別的文件中沒找到c的定義,則報錯
}