精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

科技綠洲 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2023-06-22 10:05 ? 次閱讀

前言

前段時間在寫 Linux 專欄的過程中,忽然想到一個問題 :C語言的頭文件路徑,因為在GCC環(huán)境下面,可以很直觀的了解到程序?qū)︻^文件的查找位置,但是對于使用集成開發(fā)環(huán)境 KEIL 或者 IAR 的朋友們來說,一些系統(tǒng)的庫文件路徑根本就不知道在什么地方。

所以本文我們就來聊一下 C 語言的頭文件路徑相關(guān)的問題 ,包括系統(tǒng)路徑位置,絕對路徑與相對路徑,正斜杠 / 與 反斜杠 \\ 使用說明等。

我是矜辰所致,全網(wǎng)同名,盡量用心寫好每一系列文章,不浮夸,不將就,認真對待學(xué)知識的我們,矜辰所致,金石為開!

一、C語言中的頭文件引用

我們都知道,在我們 C 編程的時候,我們頭文件的引用使用的是 #include <> 或者 #include "",比如:

圖片

而且大家應(yīng)該都知道:

  • include 使用雙引號" ",編譯器首先在當前目錄下查找頭文件,如果沒有找到,再到系統(tǒng)目錄下查找。
  • include 使用尖括號< >,編譯器會到系統(tǒng)目錄下查找頭文件;

這里額外提一句,因為 使用雙引號" "如果在當前目錄找不到頭文件,最終還是會去系統(tǒng)路徑下尋找,所以頭文件包含,完全可以都使用雙引號" " ,至于實際中還是有很多使用 < > 和 " " 混搭,那是因為在確定是引用系統(tǒng)路徑的頭文件的時候,使用 < > 相對來說效率高那么一點點,省去了在當前目錄下面尋找的那一點時間。

對于使用雙引號" " 的當前目錄下查找,大家應(yīng)該都知道,就是與引用頭文件的.c 文件相同的目錄下,比如上面是 main.c 文件引用的,就是首先在與 main.c 相同的目錄中去查找。

那么對于 < > 從系統(tǒng)路徑中搜索,這個系統(tǒng)目錄到底在哪里呢?

二、KEIL 中的頭文件路徑

我們先從我們熟悉的 IDE 入手,用 KEIL 來說明一下。

2.1 IncudePaths 指定的路徑

在我們使用 KEIL 做項目的時候,都需要一個IncudePaths ,就是填寫頭文件路徑,如下圖所示:

KEIL4 上是51單片機的項目:

圖片

KEIL5 上是 STM32 的項目:

圖片

為了工程結(jié)構(gòu)框架,我們不可能把文件放在同一個目錄下面,所以需要進行額外的指定頭文件路徑,這里只要用過 KEIL 的朋友應(yīng)該都能明白。

對于 include 使用雙引號" "的頭文件,首先會在引用頭文件的.c 文件相同的目錄下去查找,如果查找不到,會在上面 IncudePaths 設(shè)置中所有設(shè)置過的目錄中去查找,這一點我們不多贅述。

絕對路徑和相對路徑

這里我們額外說明一個問題,絕對路徑與相對路徑。

在上面的示例圖中,我們可以看到,IncudePaths 里面所添加的路徑,都是 ../開頭的,這種表示方式就是相對路徑。

使用相對路徑的好處是即便整個工程移動了位置,也無需修改什么設(shè)置,因為工程文件的相對位置沒有改變。

簡單復(fù)習(xí)下相對路徑的表示:

./ : 表示當前路徑../:表示上一級目錄

絕對路徑就比較簡單了,絕對路徑就是直接從根部(盤符)開始表示的路徑,在 Windows 中,就是 C盤,D盤,這些,在 Linux 中,沒有盤符的說法,根部就是 / ,比如下面兩個都是絕對路徑的表示:

C:\\Keil\\C51 /home/qzh/linux

正斜杠 / 與 反斜杠 \\ 與雙斜杠

正好提到文件路徑,順帶把斜杠的問題也說一下,在上面示意圖中,我們可以看到,既有正斜杠,又有反斜杠:

圖片

對于路徑的表示 ( 聲明,這里只是針對文件路徑!路徑! ):

  • Linux 中都使用正斜杠 /. Linux下好理解,只能用正斜杠 / :/home/qzh/linux.
  • 在Windows 中,稍微復(fù)雜一點 . 在Windows 中常用 反斜杠 \\ ,比如我們隨便看一個系統(tǒng)顯示的路徑都是反斜杠 \\

圖片

. 實際上,Windows 除了在一些特定的場合必須用反斜杠 \\,在引用路徑的時候斜杠/和反斜杠\\可以互用的。

比如下面兩種方式的引用都是可以的:

#include "..\\led\\led.h" 

#include "../led/led.h"

為了可移植性,引入頭文件時建議使用正斜杠/#include "../led/led.h"

不僅如此,在Windows下引用文件路徑的時候,正反雙斜杠//\\\\ 與斜杠 / 、反斜杠\\可以互用的,如下圖所示:

圖片

雙斜杠

在寫一些腳本或者程序的時候(上面是引用路徑的情況,這里額外提一下程序中的情況,程序中!程序中!),我們也經(jīng)常看到雙斜杠,比如:

C:\\\\Keil\\\\C51

這種路徑表示是為什么呢?

因為在大多編譯器中,\\是一個轉(zhuǎn)義字符,例如\\n,\\r ,所以如果使用反斜杠 \\,會使得路徑出問題,所以會寫成 \\\\

當然正如我們上面說過的,我們在程序中可以寫成 C:\\\\Keil\\\\C51 ,當然也可以使用 斜杠 / 寫成C:/Keil/C51

2.2 include < > 搜索的系統(tǒng)路徑

額外提了那么多,回到我們的正題,來說說在 KEIL 中的 #include < > 的查找路徑。

比如我們在本文第一張示意圖上有一個應(yīng)用#include ,我們明確的告訴編譯器這個需要從系統(tǒng)路徑中去查找,這個 KEIL 所謂的系統(tǒng)路徑在什么地方呢?

這里我們也沒什么好分析的,直接告訴大家答案:

第一個基于51平臺的,使用的 51 的編譯器, #include < > 的查找路徑為“KEIL的安裝目錄”:\\Keil\\C51\\INC ,比如博主的KEIL安裝在C盤,這個路徑就是C:\\Keil\\C51\\INC

圖片

當然,我們可以簡單的做個試驗確認一下,我們可以在 KEIL 中先打開 這個頭文件:

圖片

然后我們打開C:\\Keil\\C51\\INC 目錄下的 MATH.h 文件,進行簡單的修改,然后看一下是否是同一個文件,如下圖:

圖片

那么對于 KEIL5 中的 STM32 中如果使用 #include < > ,那么這個的查找路徑又是怎樣的呢?

STM32 在 KEIL中使用的編譯器為 ARMCC,這個系統(tǒng)路徑的位置為:“KEIL的安裝目錄”:\\Keil_v5\\ARM\\ARMCC\\include ,比如博主的KEIL安裝在C盤,這個路徑就是C:\\Keil_v5\\ARM\\ARMCC\\include

這一點我就不去確定了,大家可以自己添加一個庫函數(shù)頭文件,然后自己根據(jù)上文的方式測試一下便知。

三、Linux 中的頭文件路徑

上面介紹了 Windows 下的 KEIL 環(huán)境中的頭文件系統(tǒng)路徑,那么我們來看看 Linux 中的路徑又是在哪里,我們知道在 Linux 中 C 語言的編譯器是 GCC 編譯器,在文章開頭的前言我就寫過了, 使用 GCC 編譯器可以很直觀的查看到 #include < > 尖括號包含的頭文件的查找路徑,下面我們來看一下。

圖片

寫一個簡單的程序,里面用到了 這個頭文件,我們可以使用編譯選項 -v 來打印出詳細的編譯步驟:

圖片

如上圖所示,在 Linux 是不是很直觀,沒什么需要特別說明的。

那么我們再換另外一種編譯器,其實還是 GCC ,只不過是 ARMGCC,我們也來看一看:

圖片

可以看到,同樣的可以很直觀的看到尖括號包含的頭文件的搜索位置,當然,因為編譯器的更換,他們搜索的位置也改變了。

最后簡單總結(jié)一下,使用 #include < > 所包含的頭文件,其查找路徑和使用的編譯器有關(guān),編譯器都會自帶常用的庫文件,在 GCC 環(huán)境下面,使用 -v 選項就會自動打印出查找位置,使用 IDE 環(huán)境根據(jù) IDE 使用的編譯器不同存放在對應(yīng)的目錄文件下面,一般來說都可以在 IDE 安裝目錄中可以找到。

結(jié)語

本文我們針對 C 語言頭文件路徑問題進行了講解,舉例說明了 Windows 下的 IDE 環(huán)境中 和 Linux 下GCC 環(huán)境中的C語言的 頭文件查找路徑。

文中還對引出的絕對路徑與相對路徑,還有路徑引用時候的 正斜杠 / 與 反斜杠 \\ 與雙斜杠 進行了說明。

希望大家以后在遇到頭文件路徑問題的時候,能夠知道如何去查找問題,解決問題!

好了,本文就到這里,謝謝大家!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11232

    瀏覽量

    208949
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1618

    瀏覽量

    49057
收藏 人收藏

    評論

    相關(guān)推薦

    你應(yīng)該搞懂的 C 語言頭文件路徑問題

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

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

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

    C/C++頭文件大全

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

    單片機C語言頭文件

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

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

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

    C語言中程序員編寫的頭文件和編譯器自帶的頭文件

    #include 指令會指示 C 預(yù)處理器瀏覽指定的文件作為輸入。預(yù)處理器的輸出包含了已經(jīng)生成的輸出,被引用文件生成的輸出以及 #include 指令之后的文本輸出。例如,如果您有一個
    的頭像 發(fā)表于 11-12 14:55 ?7806次閱讀

    C語言頭文件是做什么的

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

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

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

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

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

    C語言中頭文件包含里的那些事

    很多事不深入以為自己懂了,但真正用到項目上,才發(fā)現(xiàn)了問題。曾以為自己寫C語言已經(jīng)輕車熟路了,特別是對軟件文件的工程管理上,因為心里對自己的代碼編寫風(fēng)格還是有自信的。(畢竟剛畢業(yè)時老大對我最初的訓(xùn)練
    的頭像 發(fā)表于 03-25 13:57 ?2365次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中頭文件</b>包含里的那些事

    keil添加了頭文件仍然報找不到頭文件的原因

    ,則需要重新將文件夾包含到工程中。4)點擊魔術(shù)棒中的C/C++,將包含該頭文件的最內(nèi)層文件夾包含進去,一定要包含最內(nèi)層
    發(fā)表于 11-21 14:21 ?13次下載
    keil添加了<b class='flag-5'>頭文件</b>仍然報找不到<b class='flag-5'>頭文件</b>的原因

    單片機-頭文件

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

    C語言頭文件路徑的剖析

    編譯器在編譯過程中會按照這些路徑信息到指定的位置去查找頭文件,然后通過預(yù)處理器作展開處理。在查找頭文件的過程中,編譯器會按照默認的搜索順序到不同的
    的頭像 發(fā)表于 02-17 09:44 ?1852次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>頭文件</b><b class='flag-5'>路徑</b>的剖析

    可重復(fù)頭文件的固定結(jié)構(gòu)

    年輕人,你可曾記得,在修習(xí)C語言的時候,見過這樣的字句:在創(chuàng)建頭文件的時候,一定要加入保護宏。
    的頭像 發(fā)表于 08-29 10:23 ?316次閱讀
    可重復(fù)<b class='flag-5'>頭文件</b>的固定結(jié)構(gòu)

    C語言中的頭文件能不能重復(fù)包含

    C語言中的頭文件能不能重復(fù)包含? 比如代碼寫成這樣,stdio.h 連續(xù)包含了兩次。 #include #include int main(){ printf("helloworld
    的頭像 發(fā)表于 11-26 17:19 ?81次閱讀