首頁 >後端開發 >C#.Net教程 >c語言中include用法是什麼?

c語言中include用法是什麼?

烟雨青岚
烟雨青岚原創
2020-06-15 15:41:5817239瀏覽

c語言中include用法是什麼?

c語言中include用法是什麼?

1、#include 指令介紹

##include 指令是預處理指令的一種,預處理指令可以將別的原始碼內容插入到所指定的位置;可以識別出只有在特定條件下才會被編譯的某一段程式碼;

可以定義類似識別符功能的宏,在編譯時,預處理器會用別的文字取代該巨集。

2、插入頭檔的內容

#include 指令告訴預處理器將指定頭檔的內容插入到預處理器指令的對應位置。有兩種方式可以指定插入頭檔:

#include <文件名>
#include "文件名"

如果需要包含標準庫頭檔或實作版本所提供的頭文件,應該使用第一種格式。如下例所示:

#include <math.h>               // 一些数学函数的原型,以及相关的类型和宏

如果需要包含針對程式所開發的來源文件,則應該使用第二種格式。採用 #include 指令所插入的文件,通常文件副檔名是 .h,文件包含函數原型、巨集定義和型別定義。

只要使用 #include 指令,這些定義就可被任何原始檔案使用。如下例所示:

#include "myproject.h"         // 用目前專案中的函數原型、型別定義與巨集

#你可以在 #include 指令中使用巨集。如果使用巨集,該巨集的取代結果必須確保產生正確的 #include 指令。

範例 1 展示了這樣的 #include 指令。

【範例1】在#include 指令中的巨集

#ifdef        _DEBUG_
  #define       MY_HEADER       "myProject_dbg.h"
#else
  #define       MY_HEADER       "myProject.h"
#endif
#include        MY_HEADER

當上述程式碼進入預處理時,如果DEBUG 巨集已被定義,那麼預處理器會插入myProject_dbg.h 的內容;如果還沒定義,則插入myProject.h 的內容。

3、預處理器如何找到頭檔

由給定的 C 語言實作版本決定 #include 指令所指定檔案的搜尋路徑。同時,也由實作版本決定檔案名稱是否區分大小寫。對於命令中使用尖括號指定的檔案(),預處理器通常會在特定的系統路徑下搜索,例如,在 Unix 系統中,會搜尋路徑 /usr/local/include 與 /usr/include。

對於指令中以雙引號指定的檔案("檔案名稱"),預處理器通常會先在目前目錄下尋找,也就是包含程式其他原始檔的目錄。如果在目前目錄下沒有找到,那麼預處理器也會搜尋系統的 include 路徑。檔案名稱中可以包含路徑。但如果檔案名稱中包含了路徑,則預處理器只會到該目錄下尋找。

你也可以透過使用編譯器命令列選項,或在環境變數(該變數通常稱為 INCLUDE)中加入搜尋路徑,為 #include 指令指定自己的搜尋路徑。具體的做法請參考採用的編譯器的說明文件。

4、嵌套的#include 指令

#include 指令可以嵌套使用;也就是說,透過#include 指令插入的原始檔本身也可以包含另一個#include 指令。預處理器最多允許 15 層的嵌套包含。

因為頭檔有時會包含另一個頭文件,很容易發生相同的一個文件被多次包含的情況。例如,假設檔案myProject.h 中包含如下程式碼:

#include <stdio.h>

如果原始檔案包含下面的#include 命令,就會兩次包含stdio.h,一次是直接包含,另一次是間接包含:

#include <stdio.h>
#include "myProject.h"

然而,可以採用條件式編譯的命令,方便地避免多次包含相同的檔案。例 2 使用了這個技巧。

【範例2】避免多次包含

#ifndef INCFILE_H_
#define INCFILE_H_
/* ...实际的头文件incfile.h的内容写在这里... */
#endif  /* INCFILE_H_ */

第一次出現包含 incfile.h 的指令時,INCFILE_H_ 巨集是沒有定義的。預處理器因此插入 #ifndef 和 #endif 之間的內容,這段內容包含了 INCFILE_H_ 巨集的定義。嵌入 incfile.h 檔案之後,#ifndef 條件就會為 false,預處理器會忽略 #ifndef 和 #endif 之間的內容。

推薦教學:《C語言

以上是c語言中include用法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn