1. 程式人生 > >C語言中宣告、定義和初始化的區別

C語言中宣告、定義和初始化的區別

函式和變數(全域性變數)都有宣告定義
對於函式而言:
同一檔案內,如果函式fun_1呼叫fun_2時,如果fun_2在fun_1之後定義,則需在fun_1之前對fun_2進行宣告,如下:
void fun_2();// 宣告
void fun_1() { 
...
fun_2();
...
 } // 呼叫fun_2
void fun_2() { ... } // 定義
不同檔案內,呼叫外部函式時,需要先#include對應標頭檔案(標頭檔案包含函式的宣告,可直接匯入原始檔,但不建議),接著呼叫該函式。
對變數而言:
不管在同一個檔案還是不同的檔案內,在定義之前使用必須提前宣告,並且在宣告時要使用關鍵詞extern:
// 同一檔案內的情況:
extern int b;
main()
{
    printf("b = %d\n", b);
}
int b = 3;
此外,其宣告用於說明變數的屬性(主要是變數的型別),且可多次宣告;而變數的定義除此以外還將引起儲存器的分配,且只能定義一次。
注意:定義是一種特殊的宣告。
int sp;
double val[MAXVAL];
// 這兩條語句定義變數sp和val,併為之分配儲存單元,同時這兩條語句還可以作為該原始檔其餘部分的宣告。
extern int sp;
extern double val[];
// 這兩條語句只是做了宣告,並沒有分配儲存空間

注意:在定義中必須指定陣列的長度,但extern宣告則不一定要指定陣列長度。
變數初始化在變數的定義同時進行賦值,定義之後再賦值不叫初始化。