在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言頭文件路徑的剖析

汽車電子技術 ? 來源:宅學部落 ? 作者: 王利濤 ? 2023-02-17 09:44 ? 次閱讀

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

#include 
#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 為例,當我們使用尖括號 <> 包含一個頭文件時,頭文件的搜索順序為:

? 通過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 
#include "module.h"
int main (void)
{
    printf("NUM = %d\\m, 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 ,觀察程序的編譯運行結果
  • 只保留/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節:

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19811

    瀏覽量

    233596
  • 文件
    +關注

    關注

    1

    文章

    578

    瀏覽量

    25213
  • 編譯器
    +關注

    關注

    1

    文章

    1656

    瀏覽量

    49896
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    你應該搞懂的 C 語言頭文件路徑問題

    前段時間在寫 Linux 專欄的過程中,忽然想到一個問題 :C語言頭文件路徑,因為在GCC環境下面,可以很直觀的了解到程序對頭文件的查找位
    的頭像 發表于 06-14 11:41 ?6003次閱讀
    你應該搞懂的 <b class='flag-5'>C</b> <b class='flag-5'>語言</b><b class='flag-5'>頭文件</b><b class='flag-5'>路徑</b>問題

    C語言必備知識頭文件包含

    頭文件C語言中是非常重要的組成部分。
    的頭像 發表于 12-01 18:20 ?2435次閱讀

    C語言深度剖析

    C語言深度剖析[完整版].pdfC語言深度剖析[完整版].pdf (919.58 KB )
    發表于 03-19 05:11

    C/C++頭文件大全

    C/C++頭文件一覽,一本很好的工具速查手冊
    發表于 11-10 17:45 ?0次下載

    單片機C語言頭文件

    介紹有關于單片機C51編程時候有關頭文件的相關知識,自己整理,歡迎指正!
    發表于 12-10 15:56 ?12次下載

    C語言深度剖析

    C語言深度剖析
    發表于 05-05 17:40 ?7次下載

    C語言深度剖析

    C語言深度剖析
    發表于 12-20 22:50 ?0次下載

    如何在C++代碼中使用C頭文件

    12.3 在C target=_blank style=cursor:pointer;color:#D05C38;text-decoration:underline;》C++中使用C
    發表于 10-19 09:24 ?3次下載

    C語言頭文件是做什么的

    c語言程序代碼文件擴展名只能是.c或者.h,換句話說,c語言程序代碼只能在擴展名為.
    的頭像 發表于 02-13 15:29 ?9701次閱讀

    C語言頭文件組織作用與包含原則詳解

    說明 本文假定讀者已具備基本的C編譯知識。 如非特殊說明,文中源文件指 * .c文件頭文件指 *.h
    的頭像 發表于 11-12 17:49 ?3151次閱讀

    C語言頭文件組織與包含原則

    說明本文假定讀者已具備基本的C編譯知識。 如非特殊說明,文中“源文件”指 * .c文件,“頭文件”指 *.h
    的頭像 發表于 11-14 11:31 ?3746次閱讀

    單片機-頭文件

    reg52.h頭文件的作用在代碼中引用頭文件,其實際意義是將頭文件中的所用內容都放到引用頭文件的地方下面是reg52.h頭文件的內容:/*-
    發表于 11-23 17:21 ?17次下載
    單片機-<b class='flag-5'>頭文件</b>

    C 語言頭文件路徑位置問題

    前言 前段時間在寫 Linux 專欄的過程中,忽然想到一個問題 :C語言頭文件路徑,因為在GCC環境下面,可以很直觀的了解到程序對頭文件
    的頭像 發表于 06-22 10:05 ?6802次閱讀
    <b class='flag-5'>C</b> <b class='flag-5'>語言</b>的<b class='flag-5'>頭文件</b><b class='flag-5'>路徑</b>位置問題

    C語言深度剖析.zip

    C語言深度剖析
    發表于 12-30 09:20 ?5次下載

    C語言中的頭文件能不能重復包含

    C語言中的頭文件能不能重復包含? 比如代碼寫成這樣,stdio.h 連續包含了兩次。 #include #include int main(){ printf("helloworld
    的頭像 發表于 11-26 17:19 ?501次閱讀
    主站蜘蛛池模板: 成人午夜剧场 | 美女鲜嫩bbbb | 黄色三级三级三级免费看 | 久久综合五月开心婷婷深深爱 | 久久精彩免费视频 | 都市激情亚洲综合 | 天堂视频免费在线观看 | 天堂视频在线观看 | 免费高清一级欧美片在线观看 | 美国人与性xxxxxxx | 日韩精品亚洲一级在线观看 | 天堂网在线最新版www中文网 | 免费在线观看视频网站 | 男人的天堂在线精品视频 | 欧美在线小视频 | 天堂中文在线最新版地址 | 亚洲欧美人成网站综合在线 | 九色综合伊人久久富二代 | 女人张开双腿让男人桶爽免 | 很黄的网站在线观看 | 久久亚洲欧美成人精品 | 99一级毛片 | 午夜免费的国产片在线观看 | 天天插天天射天天干 | 台湾一级毛片 | 成人午夜大片免费7777 | 天天久久影视色香综合网 | 狠狠综合 | 久久这里精品青草免费 | 韩国美女丝袜一区二区 | 四虎永久在线精品国产免费 | 国产一级大片免费看 | 天堂网中文 | 多男一女一级淫片免费播放口 | 国产你懂的在线 | 免费一级特黄特色大片在线 | 天天做日日干 | 欧美成人性动漫在线观看 | 色老头永久免费网站 | 天天摸夜夜摸爽爽狠狠婷婷97 | 成人午夜大片免费看爽爽爽 |