-
在乙個大型軟體專案中。
在內部,可能有多個檔案同時包含乙個標頭檔案。
當這些檔案被編譯並鏈結到可執行檔案中時,會出現很多重新定義錯誤。 在標頭檔案中使用 ifndef define endif 以避免重新定義標頭檔案。
方法:例如,如果要編寫標頭檔案。
在標頭檔案的開頭寫兩行:
#ifndef _test_h
定義測試 H 通常為檔名的大寫。
標頭檔案結束。
分析:當第一次包含時,由於沒有定義測試h,條件為真,因此包含(執行。
如果條件為 false,則不會再次包含 ifndef test h 和 endif 之間的 **,從而避免重新定義。 主要用於防止巨集的重複定義。
和重複的標頭檔案。
-
ifndef 和 endif 是一對條件預編譯語句,舉個例子:ifndef abc; 這意味著,如果沒有定義 abc 特性,編譯後結束前的語句將被省略來定義 abc; 本宣告; define abc;endif;比如有一段**,有時候不需要按需編譯或編譯,比如下面**:ifdef abc; 一段**; endif;這意味著,如果在程式中定義了 abc 功能,那麼編譯就是這裡所說的"某段**“,否則不會編譯,如果程式是這樣的:
ifndef abc;define abc;endif;ifdef abc;一段**; endif;那麼這裡提到的“某段**”肯定會被編譯,因為在設計程式開始時,可能有必要根據某個條件來決定是否編譯“某一段**”,但後來發現這樣的條件編譯已經沒有必要了,需要編譯“某段**”, 兩種方式,一種是把ifdef abc和endif;刪除; 另乙個是這樣的,在 ifdef abc 中; 一段**; endif;在此之前新增 ifndef abc; define abc;endif;]
-
ifndef define endif的含義:如果沒有定義,那麼一般採用完成假設的定義,防止標頭檔案被重複收錄,提高編譯效率。 ]
-
ifndef 和 endif 是一對條件預編譯語句,舉個例子:
ifndef abc;這意味著,如果未定義 abc 特性,則編譯後結束前的語句將被省略。
defineabc;本宣告;
defineabc;
endif;
比如有一段**,有時候不需要按需編譯或編譯,比如下面**:
ifdef abc;
一段**; endif;
這意味著,如果在程式中定義了 abc 功能,那麼編譯就是這裡所說的"某段**“,否則不會編譯,如果程式是這樣的:
ifndef abc;
defineabc;
endif;
ifdef abc;
一段**; endif;
那麼這裡提到的“某段**”肯定會被編譯,因為在設計程式開始時,可能有必要根據某個條件來決定是否編譯“某一段**”,但後來發現這樣的條件編譯已經沒有必要了,需要編譯“某段**”, 兩種方式,一種是把ifdef abc和endif;刪除; 另乙個是像這裡,在。
ifdef abc;
一段**; endif;
新增之前。 ifndef abc;
defineabc;
endif;
一般來說,在乙個應用開發系統中,功能的真正邏輯實現是建立在硬體層之上的,在驅動層、功能層程式、使用者應用中完成。 標頭檔案的主要功能是復用多個檔案的全域性變數(函式),防止定義衝突,並給出每個被呼叫函式的描述,它本身不需要包含程式的邏輯實現,它只起到描述性的作用,使用者程式只需要根據標頭檔案中的介面宣告呼叫相關的函式或變數, 鏈結器將從庫中查詢相應的實際定義。(編譯模式[1])。
從上面的結構圖中可以看出,標頭檔案是使用者應用程式和庫之間的橋梁和鏈結。 標頭檔案不是整個軟體中最重要的部分,但它是 C 語言家族中不可或缺的一部分。 編譯過程中,編譯器通過標頭檔案找到對應的函式庫,然後匯出引用函式的實際內容來替換原來的函式。
然後在硬體級別實現該功能。
從上面的例子可以看出,標頭檔案一般由四個部分組成:(1)標頭檔案開頭的版權和版本宣告; (2)預處理塊; (3)內聯功能的定義; (4)函式和類結構宣告等。 在標頭檔案中,使用 ifndef define endif 結構生成預處理塊,並使用 include 格式引用庫的標頭檔案。
標頭檔案的這種結構是 C 語言軟體開發的常識。
-
這是一種旨在避免重複的標頭檔案包含的用法。
假設您自己編寫的標頭檔案是 ,其中包含。 主函式檔案包含,同時又被重複收錄,這在C語言中是乙個錯誤,因為重複定義的問題已經處理好了,不會出現重複收錄錯誤。 解決方案是使用 ifndef 命令。
#ifndef my_h_h_
#define my_h_h_
#endif
以上是避免標頭檔案被重複包含的格式,我的 h h 是乙個識別符號,通常的做法是將頭檔名的所有字母大寫,並將 .把它改成下劃線,如果安全的話,你可以在它後面再加幾個H,省略號的地方是你的標頭檔案的內容。
第一次包含它時,我的 h h 沒有定義,所以定義我的 h h,然後包含標頭檔案的內容。 第二次收錄,因為第一次已經定義了我的h h,所以標頭檔案的內容不再收錄,防止重複收錄。
-
ifndef test 確定是否定義了測試,如果定義了測試,則執行語句 2,否則執行語句 1
語句 1 else
語句 2 endif
-
在乙個大型軟體專案中,可能有多個檔案同時包含乙個標頭檔案,當這些檔案被編譯並鏈結到乙個可執行檔案時,會出現大量的重新定義錯誤。 標頭檔案中的實用程式 ifndef
#define
endif 避免了標頭檔案的重新定義。
方法:例如,如果要編寫標頭檔案。
在標頭檔案的開頭寫兩行:
#ifndef
test_h
#define
測試 H 通常將檔名大寫。
分析:當第一次包含時,由於沒有定義測試h,條件為真,因此包含(執行。
#ifndef
** 在測試 h 和 endif 之間,當第二次包含時,前乙個測試 h 已被定義,條件為 false,ifndef
測試 h 和 endif 之間的 ** 將不再包含,從而避免重新定義。 它主要用於防止重複的巨集定義和重複包含標頭檔案。
-
Q:我真的不知道怎麼跳過,不知道是收錄時直接跳過,還是只跳過編譯的部分,然後收錄最後編譯的標頭檔案)。
答:當它包含在內時,請跳過它。 (但是,此包含僅在編譯時完成)。
問:cpp 檔案就是這種情況,假設 ab 寫入 ifndef endif,但 ab 出現在另乙個 cpp 中,這個 ifndef endif 不起作用,a: 可以。
問:即 ifndef endif 只是確保同一 cpp 中的標頭檔案不會被重複編譯?
答:ifndef 將確保不會有重複引用,以避免編譯錯誤。 但是,這並不是為了避免“在同乙個CPP中使用”。
相反,這是為了避免“任何導致雙重引用的情況”,包括“在同乙個 cpp 檔案中”。 例如,in 和 in 和 in,重複定義錯誤將發生在任何使用或(包括其他標頭檔案)的位置。
LZ也明白同樣的事情,確實是避免重複,但不是避免重複宣告,而是避免重複定義。 一般來說,C 的所有宣告都是可重複的,只要重複的宣告是相同的。 但是,即使定義相同,也不應重複定義,重複定義將導致編譯錯誤。 >>>More
我覺得它有效,我剛開始工作時做過一次,我記不太清楚了,但是你可以用 seek 函式嘗試一下,先找到它,然後再看它,我記得當我這樣做時,我讀了這本書 C 程式設計師,大約有 234 頁。
這是一回事。
IE 快取。 為了提高訪問網頁的速度,Internet Explorer瀏覽器會使用累積加速的方式,將您訪問過的網頁內容(包括**和cookie檔案等)儲存在您的計算機上。 此儲存空間稱為 IE 快取。 >>>More