踩坑 引用標頭檔案導致重複定義問題 extern

2021-09-11 08:58:44 字數 679 閱讀 1399

今天在乙個.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中...