c++筆記_標頭檔案

學C++的小萌新發表於2020-12-05


前言

儘管可以在函式體內定義類,但是這樣的類畢竟受到類一些限制。所以,類一般都不定義在函式體內。當在函式體外部定義類時,在各個指定的原始檔中可能只有一處該類的定義。而且,如果要在不同的檔案使用同一個類,類的定義就必須保持一致。


一、標頭檔案

1.標頭檔案作用

1.為了確保各個檔案中類的定義一致,類通常被定義在標頭檔案中,而且類所在的標頭檔案名字應與類的名字一樣。比如,string類就在名為string的標頭檔案中定義。

2.標頭檔案提高程式碼的可閱讀性,比如我們需要找到這個庫的介面函式,我們只需要檢視標頭檔案即可,然後跳轉到對應函式定義實現檔案。

2.標頭檔案通常包含什麼

標頭檔案通常包含那些只能被定義一次的實體,如類,const和constexpr變數等。標頭檔案也經常用到其他標頭檔案的功能。

ps:標頭檔案一旦改變,相關的原始檔必須重新編譯以獲取更新過的宣告。

二、前處理器概述

1.什麼是前處理器

確保標頭檔案多次包含仍能安全工作的常用技術是前處理器(preprocessor)

2.前處理器作用

前處理器是在編譯之前執行的一段程式,可以部分地改變我們所寫的程式。之前已經用到類一項預處理功能#include,當前處理器看到#include標記時就會用指定的標頭檔案的內容代替#include。

3.標頭檔案保護符

C++程式還會用到一項預處理功能是標頭檔案保護符,標頭檔案保護符依賴於預處理變數。

預處理變數有兩種狀態:已定義和未定義。

#define指令把一個名字設為預處理變數,另外兩個指令則分別檢查某個指定的預處理變數是否已經定義:#ifdef當且僅當變數已定義時為真,#ifndef當且僅當變數未定義時為真。一旦檢查結果為真,則執行後續操作直至遇到#endif指令為止。

#ifndef SALES_DATA_H		//檢查預處理變數是否定義
#define SALES_DATA_H		//把SALES_DATA_H定義為預處理變數
#include<string>
struct data{
 /***/
};
#endif					   //如果檢查預處理變數為真,則執行結構體內部分

ps:預處理變數無視C++語言中關於作用域的規則。

整個程式中的預處理變數包括標頭檔案保護符必須唯一,通常的做法是基於標頭檔案中類的名字來構建保護符的名字,以確保其唯一性。為了避免與程式中的其他實體發生名字衝突,一般把預處理變數的名字全部大寫。

相關文章