日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在一個軟件項目中,如果需要在一個文件中包含另一個頭文件時,一般有兩種包含方式:

?????#include <stdio.h>#include “module.h”

如果你引用的頭文件是標準庫的頭文件或官方路徑下的頭文件,一般使用尖括號 <> 包含;如果你使用的頭文件是自定義的或項目中的頭文件,一般使用雙引號 "" 包含。頭文件路徑一般分為絕對路徑和相對路徑:絕對路徑以根目錄 / 或者windows下的每個盤符為路徑起點;相對路徑則是以程序文件當前的目錄為起點。

#include ”/home/wit/code/xx.h” //linux下的絕對路徑#include “F:/litao/code/xx.h" //Windows下的絕對路徑#include ”../lcd/lcd.h” //相對路徑,..表示當前目錄的上一層目錄#include ”./lcd.h” //相對路徑,.表示當前目錄#include ”lcd.h” //相對路徑,當前文件所在的目錄

編譯器在編譯過程中會按照這些路徑信息到指定的位置去查找頭文件,然后通過預處理器作展開處理。在查找頭文件的過程中,編譯器會按照默認的搜索順序到不同的路徑下面去搜索,以 #include <xx.h> 為例,當我們使用尖括號 <> 包含一個頭文件時,頭文件的搜索順序為:

• 通過GCC參數 gcc-I 指定的目錄(注:大寫的 i)

• 通過環境變量 CINCLUDEPATH 指定的目錄

• GCC 的內定目錄

• 搜索規則:當不同目錄下存在相同的頭文件時,先搜到哪個使用哪個,搜索停止

當我們使用雙引號 “” 來包含頭文件路徑時,編譯器會首先到項目當前目錄去搜索需要的頭文件,在當前項目目錄下面搜不到,再到其他指定的路徑下面去搜索:

• 項目當前目錄

• 通過 GCC 參數 gcc-I 指定的目錄

• 通過環境變量 CINCLUDEPATH 指定的目錄

• GCC 的內定目錄

• 搜索規則:當不同目錄下存在相同的頭文件時,先搜到那個使用哪個

在編譯程序時,如果我們的頭文件沒有放到官方路徑下面,我們可以通過 gcc -I 來指定頭文件路徑,編譯器在編譯程序時,就會到用戶指定的路徑目錄下面去搜索該頭文件。如果你不想通過這種方式,也可以通過設置環境變量來添加頭文件的搜索路徑。在 Linux 環境下我們經常使用的環境變量有:

• PATH: 可執行程序的搜索路徑

• C_INCLUDE_PATH: C語言頭文件搜索路徑

• CPLUS_INCLUDE_PATH: C++頭文件搜索路徑

• LIBRARY_PATH: 庫搜索路徑

我們可以在一個環境變量內設置多個頭文件搜索路徑,各個路徑之間使用冒號:隔開。如果你想每次系統開機,這個環境變量設置的路徑信息都生效,可以將下面的 export 命令添加到系統的啟動腳本::~/.bashrc文件中。

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/path1:/path2

除此之外,我們也可以將頭文件添加到 GCC 內定的官方目錄下面。編譯器在上面指定的各種路徑下面找不到對應的頭文件時,最后會到 GCC 的內定目錄下面去尋找。這些目錄是 GCC 在安裝時,通過 --prefex 參數指定安裝路徑是指定的,常見的內定目錄有:

???????
/usr/include/usr/local/include/usr/include/i386-linux-gnu/usr/lib/gcc/i686-linux-gnu/5/include/usr/lib/gcc/i686-linux-gnu/5/include-fixed/usr/lib/gcc-cross/arm-linux-gnueabi/5/include

接下來我們做一個實驗,看看實際情況跟上面說得是否一致:我們創建多個頭文件module.h,分別將其放置到不同的目錄下,在main()函數中分別#include這個頭文件,觀察程序的運行結果。

???????
# mkdir /home/test# cd test# touch main.c module.h

main.c源文件的代碼如下:

??????
// main.c#include <stdio.h>#include "module.h"int main (void){    printf("NUM = %dm, NUM");    return 0;}//#module.h#define NUM 10

在module.h中分別定義一個宏:NUM,然后將這個頭文件拷貝到不同的目錄下:

  • 將NUM定義為10,拷貝到/home/test目錄下
  • 將NUM定義為20,將module.h拷貝到/usr/include目錄下
  • 將NUM定義為30,將module.h拷貝到//usr

實驗過程:

  • 只保留/home/test/module.h頭文件,main.c中使用#include <module.h>,觀察程序的編譯運行結果
  • 只保留/home/test/module.h頭文件,main.c中使用#include "module.h",觀察程序的編譯運行結果
  • 將module.h拷貝到/home/test、/usr/include目錄下,分別定義為10、20,觀察程序的運行結果
  • 將module.h拷貝到/usr/include目錄下,main.c中使用#include "module.h",觀察程序的運行結果

這一輪實驗做下來,相信大家已經對頭文件的搜索路徑、搜索順序就有了一個清晰的認識了。本文摘自《嵌入式C語言自我修養》9.4.6節:

C語言頭文件路徑剖析

 

想學習編程的小伙伴們可以轉發+關注+私信回復:“資料”就可以拿到一份我為大家準備的C++編程學習資料(C/C++高級開發/Linux 服務器架構/ 大型互聯網應用/分布式/高并發/大數據等資料)

分享到:
標簽:語言
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定