函數和變量都有聲明和定義兩個寫法。聲明的目的是告訴別的代碼這個變量的名稱,而定義比聲明多了一個功能,除了告知名稱以外,還會為這個變量分配內存。
對於函數來說,加不加extern都沒有關系,因為有函數體一定是定義,加extern也會被忽略,而沒有函數體的就是聲明,
int add(int a, int b);
等價於 extern int add(int a, int b);
如果是變量的話
int a; // 定義了一個變量a
extern int a; // 聲明了一個變量a
變量可以有任意個聲明,但是只能有一個定義,全局變量定義在多個文件中,只能有一個文件中的不加extern,其余的都必須加extern表示聲明。
說明:在.h文件中,一般用於聲明一些變量.不是定義,所有的定義及實現都是在.c或.cpp文件中.
所以,要特別注意
定義全局變量的時候,優其是全局變量的時候,是要特別注意的:
全局變量的聲明一般寫在 .h文件中,加上extern,因為不加就是定義變量了,所以不對.這樣凡是#include 這個.h文件的 文件都可以訪問這個全局變量. 但是這個變量的定義一定在.c或.cpp文件中.而且只能有一個這個變量的定義.