#ifndef a
#define a
...int i;
...#endif
include "a.h"
...incldue "a.h"
...
將b.c和c.c編譯後鏈結時,按照c++進行鏈結,出現變數重複定義的錯誤;而按照c進行鏈結,則成功。
結論:在c++中,當你使用include 「a.h」的b.c檔案生成b.obj的時候,int i 在裡面定義了。當另外乙個include ""a.h"的c.c生成c.obj的時候,int i 又被定義。然後兩個obj連線在一起時,就會出現重複定義。
在c中,遇到多個int i,則自動認為其中乙個是定義,其他的是宣告。
猜測:在進行編譯的時候,c++語言將全域性變數預設為強符號。c語言則依照是否初始化進行強弱的判斷。
標頭檔案中只宣告;在原始檔中定義。
#ifndef a
#define a
...extern int i;
...#endif
int i;
static 在c 和c 中的不同之處
一言以蔽之 static 變數作用域都很長,該函式該變數只能在本檔案之中用,最大的區別在於c 中的static 屬於類內部成員不是說哪個物件的,就死不定義這個類的物件它已經存在了!static主要有三個作用 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 前兩種c和c 都有,...
C 與C語言的不同之處
本文介紹了c 與c語言的不同之處。常見區別 庫函式 c stdio.h c iostream 輸入 c scanf c cin 輸出 c printf c cout 動態開闢 c malloc c new 釋放 c free c delete 以上是比較常見之處。下面是我在學習c 中認識到的內容 內...
C語言和C 中const的不同之處
includeint main 檔案中 include demo.cpp 可不用包含 int main 檔案中 pp檔案中 include demo.cpp 必須包含 int main pp檔案中 const int a 10 不行需要寫 extern const int a 10 include ...