1. 程式人生 > >XXX被多次定義的問題

XXX被多次定義的問題

在標頭檔案中定義瞭如下字元陣列

char type_chunk[20] = "chunk";
char type_read[20] = "read";
char type_hash[20] = "hash";
char type_dedup[20] = "dedup";
char type_restore[20] = "restore";
char type_rewrite[20] = "rewrite";
char type_trace[20] = "trace";
char type_container[20] = "container";
char type_restore_chunk[20] = "res_chunk";
char type_restore_recipe[20] = "res_recipe";

且工程中的每個.c檔案都包含了此.h檔案

結果出現了各種被多次定義的錯誤提示

如下:


原因是標頭檔案被多次編譯

有以下幾種方法可以改:

1、在標頭檔案中宣告,在主函式的c檔案中定義

int g_number; // 定義式,不管你放在哪裡,它也是定義式。定義式需要分配記憶體,所以一個變數的定義式應該只有一個,而且只能有一個。你的標頭檔案被多處包含,相當於定義了多個定義式,所以報錯是必然的。

extern int g_number; // 宣告式,不分配記憶體,可以有N多個。放在標頭檔案中,被包含多次,無所謂

2、在每個用到的c檔案定義一遍(這樣就不是全域性變量了)

因為我需要用到的只是這個字串的值,不需要改變其內容。但是這種方法太原始,不建議採用。。

3、直接用difine

既然只需要用值,直接define簡單的多呀,又不會出錯

over