標頭檔案裡不要有全域性定義

2021-07-03 11:58:13 字數 420 閱讀 1187

//由於乙個標頭檔案可能會被多次包含,所以有全域性定義的情況下,在鏈結會出現重定義錯誤

//全域性定義不應該放在標頭檔案裡,應該放入其相應的實現檔案中。

//如果乙個標頭檔案裡的全域性定義被多個cpp檔案所使用,則只有乙個檔案可以include這個標頭檔案,其他只能是extern這些全域性宣告。 如何乙個標頭檔案要引用乙個其他檔案裡已經定義的全域性量,則應用extern

#ifndef lock_h

#define lock_h

void lock();

void unlock();

void quanju(){};/小心

int quanjubianliang;小心

class xiao

//類中,當然ok!

};#endif

全域性變數在標頭檔案中「定義」

看著標題,定義上面加了乙個引號,這個得注意了。怎麼解釋呢,一般而言,變數只能定義在.c檔案中,宣告變數才在.h檔案中。下面就打破常規,把定義變數的語句放在.h檔案中,但是對實際而言,變數定義在標頭檔案中是表面上的。下面直接給出 有三個檔案a.h a.c main.c a.h裡面的 csharp vi...

能否在標頭檔案中定義全域性static變數?

能否在標頭檔案中定義全域性static變數?一 在沒有類定義的標頭檔案中定義全域性static變數g static。用gcc和g 都可以編譯。但執行結果顯示,在test.c和main.c中,變數的值相同,但位址不同,說明是兩個變數。frank userver project test static ...

不要在標頭檔案中定義有鏈結的實體

具有鏈結的實體,包括名字空間級的變數或函式,都需要分配記憶體,在標頭檔案中定義這樣的實體將導致連線錯誤或者記憶體浪費。所以,應該將所有具有鏈結的實體放入實現檔案。下面的標頭檔案 1 intmax 2string hello hello,world 3void fun 只要被乙個以上的原始檔所包含,就...