避免多重包含

來源:互聯網
上載者:User

在編寫標頭檔之前,我們需要引入一些額外的前置處理器設施。前置處理器允許我們自訂變數。

前置處理器變數的名字在程式中必須是唯一的。任何與前置處理器變數相匹配的名字的使用都關聯到該前置處理器變數。為了避免名字衝突,前置處理器變數經常用全大寫字母表示。

前置處理器變數有兩種狀態:已定義或未定義。定義前置處理器變數和檢測其狀態所用的前置處理器指示不同。#define
指示接受一個名字並定義該名字為前置處理器變數。#ifndef
指示檢測指定的前置處理器變數是否未定義。如果前置處理器變數未定義,那麼跟在其後的所有指示都被處理,直到出現 #endif

 

可以使用這些設施來預防多次包含同一標頭檔:

#ifndef SALESITEM_H

#define SALESITEM_H

// Definition of Sales_itemclass and related functions goes here

#endif

 

條件指示

#ifndef SALESITEM_H

測試 SALESITEM_H
前置處理器變數是否未定義。如果 SALESITEM_H
未定義,那麼 #ifndef
測試成功,跟在 #ifndef
後面的所有行都被執行,直到發現#endif
。相反,如果 SALESITEM_H
已定義,那麼 #ifndef
指示測試為假,該指示和 #endif
指示間的代碼都被忽略。

為了保證標頭檔在給定的源檔案中只處理過一次,我們首先檢測 #ifndef
。第一次處理標頭檔時,測試會成功,因為 SALESITEM_H
還未定義。下一條語句定義了 SALESITEM_H
。那樣的話,如果我們編譯的檔案恰好又一次包含了該標頭檔。#ifndef
指示會發現 SALESITEM_H
已經定義,並且忽略該標頭檔的剩餘部分。

標頭檔應該含有保護符,即使這些標頭檔不會被其他標頭檔包含。編寫標頭檔保護符並不困難,而且如果標頭檔被包含多次,它可以避免難以理解的編譯錯誤。當沒有兩個標頭檔定義和使用同名的前置處理器常量時,這個策略相當有效。我們可以為定義在標頭檔裡的實體(如類)命名前置處理器變數來避免前置處理器變數重名的問題。一個程式只能含有一個名為 Sales_item
的類。通過使用類名來組成標頭檔和前置處理器變數的名字,可以使得很可能只有一個檔案將會使用該前置處理器變數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.