C語言裡可能經常會說:宣告變數時不會分配記憶體,定義變數時才會分配記憶體。區域性變數的宣告即是定義:
void fun(){ int a = 1; //既是宣告,也是定義,初始值為1 int b; //既是宣告,也是定義,初始值偽隨機。}
extern int a; //宣告,不再分配記憶體,extern關鍵字表示此變數已在其它地方定義。void fun(){ printf("%d\n",a); //此處用到了全域性變數a,而a是在後面定義,所以需要在前面再宣告一次。}int a = 1; //全域性變數a定義,為它分配記憶體int main(){ fun(); return 0;}
void fun(); //函式宣告
extern int a; //宣告,不再分配記憶體,extern關鍵字表示此變數已在其它地方定義。//函式定義void fun(){ printf("%d\n",a); //此處用到了全域性變數a,而a是在另外一個原始檔中定義,所以需要在前面再宣告一次。}
#include "fun.h"int a = 1; //全域性變數a定義,為它分配記憶體int main(){ fun(); return 0;}
//此處定義函式,有函式體,當然也是一次宣告。void fun(){ printf("hello world\n");}int main(){ fun(); //fun函式在前面已經定義,所以可直接呼叫 return 0;}
void fun();//此處須宣告一次(沒有函式體),main函式才能呼叫它。int main(){ fun(); //fun函式在後面定義。 return 0;}//此處定義函式,有函式體,當然也是一次宣告。void fun(){ printf("hello world\n");}
C語言裡可能經常會說:宣告變數時不會分配記憶體,定義變數時才會分配記憶體。區域性變數的宣告即是定義:
void fun(){ int a = 1; //既是宣告,也是定義,初始值為1 int b; //既是宣告,也是定義,初始值偽隨機。}
全域性變數只能定義一次,可以宣告多次,在全域性變數不可見的地方但又想使用就得進行宣告。同一個檔案中,比如main.c:extern int a; //宣告,不再分配記憶體,extern關鍵字表示此變數已在其它地方定義。void fun(){ printf("%d\n",a); //此處用到了全域性變數a,而a是在後面定義,所以需要在前面再宣告一次。}int a = 1; //全域性變數a定義,為它分配記憶體int main(){ fun(); return 0;}
不同檔案中:fun.h:void fun(); //函式宣告
fun.c:extern int a; //宣告,不再分配記憶體,extern關鍵字表示此變數已在其它地方定義。//函式定義void fun(){ printf("%d\n",a); //此處用到了全域性變數a,而a是在另外一個原始檔中定義,所以需要在前面再宣告一次。}
main.c:#include "fun.h"int a = 1; //全域性變數a定義,為它分配記憶體int main(){ fun(); return 0;}
前面主要是針對變數的宣告和定義的說明,當然也提到了函式的宣告與定義。函式和變數一樣,使用前一定要先宣告或者定義,定義本身也是一次宣告。//此處定義函式,有函式體,當然也是一次宣告。void fun(){ printf("hello world\n");}int main(){ fun(); //fun函式在前面已經定義,所以可直接呼叫 return 0;}
另一例子:void fun();//此處須宣告一次(沒有函式體),main函式才能呼叫它。int main(){ fun(); //fun函式在後面定義。 return 0;}//此處定義函式,有函式體,當然也是一次宣告。void fun(){ printf("hello world\n");}