今天在乙個.h標頭檔案中定義了乙個全域性變數,然後在兩個.cpp檔案中引用了該標頭檔案,導致變數重複定義問題。
我們知道,變數有宣告和定義,宣告可以有多次,但是定義只能有一次。打個比方:
檔案
int a;
然後我們在b.cpp和c.cpp中引用a.**件,這樣就會出現重複定義。int a;會在每乙個檔案中重新定義一次
而我們如果再前邊加上關鍵字extern,那麼就代表extern int a
為乙個關於a的宣告,此時並沒有定義,這時我們就在b.cpp和c.pp中引用a.h不會報錯,因為宣告可以多次。
舉個例子:
#include extern int a
void fun();
#include "a.h"
void fun()
#include "a.h"
int a = 1; //有且只有乙個引用a.h的cpp檔案中定義全域性變數a
int main ()
此時輸出結果為
1
2
如果有寫的不對或者不全面的地方 可通過主頁的****進行指正,謝謝
踩坑 修改標頭檔案 stdint h
個人部落格 這裡說踩坑似乎不合適,應該是自己坑自己,不過還是應當記錄下來,時時刻刻提醒自己!不同專案對 int unsigned int等資料型別會使用 typedef 為這些資料型別定義乙個新的名字,這樣在移植專案的過程中,如果不想大規模的改動原始碼,則需要自己在標頭檔案中依據修改的名字自己用 t...
ifndef 標頭檔案重複定義
ifndef只能保證重複包含時,只包含一次。但snake.cpp和main.cpp是分別進行編譯的,snake.cpp裡的 define對於main.cpp不起作用。也就是說在編譯main.cpp時,snake.h是第一次包含,因此又有乙個ch,相互鏈結時就會發現重定義。正確的作法應該這樣 1 在s...
C 標頭檔案引用問題
c c 標頭檔案的引用問題 include使用 對於乙個工程 如下 在base中包含 func3.h,func3.c,資料夾main和資料夾func4 在main中包含 main.c,func1.h,func1.c和資料夾func2 在func2中包含 func2.h和func2.c 在func4中...