C 標頭檔案包含變數時,多重定義問題!

2021-08-29 02:32:24 字數 482 閱讀 7799

#multiple definition of …

在標頭檔案中.h中包含有變數定義的時候,一般是想作為全域性變數來使用,但是使用中總是出現multiple definition of的問題,看一下:

oracleinfclass.h
#ifndef oracleinfclass_h_

#define oracleinfclass_h_

int i;

#endif /* oracleinfclass_h_ */

如果整個專案最多只有乙個.cpp檔案引用了這個.h檔案,那不會報錯,但是如果多個.cpp檔案引用了這個檔案,那就會出現重定義的問題,乙個簡單暴力的解決方案是

static int i;

標頭檔案多重包含

include檔案的乙個不利之處在於乙個標頭檔案可能會被多次包含,為了說明這種錯誤,include a.h include b.h 如果a.h和b.h都包含了乙個標頭檔案x.h。那麼x.h在此也同樣被包含了兩次,只不過它的形式不是那麼明顯而已。多重包含在絕大多數情況下出現在大型程式中,它往往需要使用...

避免標頭檔案的多重包含

通過預處理器變數,我們可以以標頭檔案保護符的形式避免在已經見到標頭檔案的情況下重新處理該標頭檔案的內容。使用預處理器變數作為標頭檔案保護符。預處理器變數有兩種狀態 已定義與未定義。define指示接受乙個名字並定義該名字為預處理器變數。ifndef指示檢測指定的預處理器變數是否未定義。如果預處理器變...

標頭檔案經常需要其他標頭檔案 避免多重包含

在編寫標頭檔案之前,我們需要引入一些額外的預處理器設施。預處理器允許 我們自定義變數。預處理器變數 的名字在程式中必須是唯一的。任何與預處理器 變數相匹配的名字的使用都關聯到該預處理器變數。為了避免名字衝突,預處理器變數經常用全大寫字母表示。預處理器變數有兩種狀態 已定義或未定義。定義預處理器變數和...