Daily C Study 17 C語言包含include

2023-01-16 06:33:02 字數 1565 閱讀 3373

成於堅持,敗於止步

檔案包含是預處理的乙個重要功能,它可用來把多個原始檔連線成乙個原始檔進行編譯,結果將生成乙個目標檔案。c語言提供#include 命令來實現檔案包含的操作,它實際是巨集替換的延伸,有兩種格式:

一、#include

其中,filename 為要包含的檔名稱,用尖括號括起來,也稱為標頭檔案,表示預處理到系統規定的路徑中去獲得這個檔案(即c 編譯系統所提供的並存放在指定的子目錄下的標頭檔案)。找到檔案後,用檔案內容替換該語句。

2、#include 「filename」

其中,filename 為要包含的檔名稱。雙引號表示預處理應在當前目錄中查詢檔案名為filename 的檔案,若沒有找到,則按系統指定的路徑資訊,搜尋其他目錄。找到檔案後,用檔案內容替換該語句。

需要強調的一點是:#include 是將已存在檔案的內容嵌入到當前檔案中。

另外關於#include 的路徑也有點要說明:include 支援相對路徑,格式如trackant(蟻跡尋蹤)所寫:.代表當前目錄,..代表上層目錄。

特別注意:

由於巢狀包含檔案的原因乙個標頭檔案可能會被多次包含在乙個原始檔中條件指示符可防止這種標頭檔案的重複處理。例如:

#ifndef bookstore_h

#define bookstore_h

#endif

條件指示符#ifndef 檢查bookstore_h 在前面是否已經被定義,這裡bookstore_h 是乙個預編譯器常量,習慣上預編譯器常量往往被寫成大寫字母,如bookstore_h 在前面沒有被定義則條件指示符的值為真於是從#ifndef 到#endif 之間的所有語句都被包含進來進行處理。相反,如果#ifndef 指示符的值為假則它與#endif 指示符之間的行將被忽略,為了保證標頭檔案只被處理一次,把如下#define 指示符

#define bookstore_h

放在#ifndef 後面這樣在標頭檔案的內容第一次被處理時bookstore_h 將被定義,從而防止了在程式文字檔案中以後#ifndef 指示符的值為真。

只要不存在兩個必須包含的標頭檔案要檢查乙個同名的預處理器常量這樣的情形,這個策略就能夠很好地運作。#ifdef 指示符常被用來判斷乙個預處理器常量是否已被定義以便有條件地包含程式**。

#ifdef 除了用於防止重複包含,還可以用於針對不同環境的條件編譯。經常出現的有

#if defined (__gcc__)    defined (__sun_c__)

之類的指令,就是針對不同編譯器、平台進行選擇編譯的預處理指令。當編譯環境沒有定義這個特定的符號的時候,則預處理器會自動忽略這一部分的**。除了用 #ifdef 判斷符號是否定義,還可以判斷符號的值。

vc 中常見的將 msc_ver 與特定值比較以判斷 vc 的版本的做法就是這個道理。

除了以上提到的一些內容,還有一些相對少見的預處理器指令,如 #pragma 。它們分別提供了一些特殊的優化手段和編譯器控制方法,可以顯著提高**質量減輕編碼負擔,但是很多時候使用這些編譯指令可能是不相容於其他編譯環境的,因此在專案中選用非標準預處理指令的時候,應該在可移植性和編碼的優勢中進行衡量後作決定。

就先到這裡,o(∩_∩)o~

我的專字段址:

待續。。。。。。

七語河17課教案

七語文河教案 16 古詩三首 教學目標 1 知識與能力 了解詩歌的有關知識,理解詩歌內容,領會其中所抒發的感情 2 過程與方法 指導學生有感情地反覆誦讀,體會古詩的意境,教會學生欣賞詩歌的方法。3 情感態度與價值觀 啟發學生熱愛祖國古代文化的思想感情,提高審美能力。教學重點 1 指導學生借助課下注釋...

北語17春《課程理論》作業

試卷總分 100 得分 100 一 單選題 共 6 道試題,共 24 分 1.目標是指有意識或無意識地依據一定的哲學或政治見解,推演出普遍的 一般的教育宗旨或原則,再將這些宗旨或原則運用於課程領域,使之成為課程領域一般性 規範性的課程目標。a.表現性 b.展開性 c.普遍性 d.行為 滿分 4 分 ...

北語17春《競爭法》作業

一 多選題 共 10 道試題,共 40 分。1.二元式立法例的優點有 a.有利於立法目的的實現 b.競爭法的執法操作起來更方 c.利於競爭法整體的協調 d.利於競爭法整體的統一。正確答案 ab 2.單一立法例的代表國家和地區有 a.匈牙利 b.我國台灣地 c.德國 d.日本 正確答案 ab 3.法群...