4 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
實(shí)際上,差異在于預(yù)處理器搜索包含文件的位置。
對于#include <filename>
預(yù)處理器以依賴于實(shí)現(xiàn)的方式搜索,通常在編譯器/ IDE預(yù)先指定的搜索目錄中。此方法通常用于包括標(biāo)準(zhǔn)庫頭文件。
對于#include "filename"
預(yù)處理器首先在與包含該指令的文件相同的目錄中進(jìn)行搜索,然后按照用于#include <filename>
表單的搜索路徑進(jìn)行搜索。此方法通常用于包括程序員定義的頭文件。
有關(guān)搜索路徑的GCC 文檔中提供了更完整的描述。

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
唯一的方法是閱讀您的實(shí)現(xiàn)文檔。
在C標(biāo)準(zhǔn)中,第6.10.2節(jié)第2至4段規(guī)定:
表單的預(yù)處理指令
#include <h-char-sequence> new-line搜索的用于實(shí)現(xiàn)定義的地方的序列報(bào)頭由之間的指定序列唯一地識別
<
和>
分隔符,并且使得由所述的全部內(nèi)容替換該指令的標(biāo)頭。如何指定場所或標(biāo)識的頭是實(shí)現(xiàn)定義的。表單的預(yù)處理指令
#include "q-char-sequence" new-line導(dǎo)致由分隔符之間的指定序列標(biāo)識的源文件的全部內(nèi)容替換該指令
"
。以實(shí)現(xiàn)定義的方式搜索指定的源文件。如果不支持此搜索,或者搜索失敗,則會(huì)重新處理該指令,就像它讀取一樣#include <h-char-sequence> new-line使用
>
原始指令中相同的包含序列(包括字符,如果有的話)。表單的預(yù)處理指令
#include pp-tokens new-line(允許與前兩種形式中的一種不匹配)。
include
指令中的預(yù)處理標(biāo)記處理與正常文本一樣。(當(dāng)前定義為宏名稱的每個(gè)標(biāo)識符將替換為其預(yù)處理標(biāo)記的替換列表。)所有替換后生成的指令應(yīng)與前兩個(gè)表單中的一個(gè)匹配。將a<
和>
預(yù)處理令牌對或一對"
字符之間的一系列預(yù)處理標(biāo)記組合成單個(gè)標(biāo)題名稱預(yù)處理標(biāo)記的方法是實(shí)現(xiàn)定義的。定義:
h-char:源字符集的任何成員,除了換行符和
>
q-char:源字符集的任何成員,除了換行符和
"

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
<和>之間的字符序列唯一地引用標(biāo)題,該標(biāo)題不一定是文件。實(shí)現(xiàn)幾乎可以隨意使用字符序列。(但是,大多數(shù)情況下,只需將其視為文件名并在包含路徑中進(jìn)行搜索,就像其他帖子所述。)
如果使用該#include "file"
表單,則實(shí)現(xiàn)首先查找給定名稱的文件(如果支持)。如果不是(支持),或者搜索失敗,則實(shí)現(xiàn)的行為就像使用了other(#include <file>
)形式一樣。
此外,存在第三種形式,當(dāng)#include
指令與上述任何一種形式都不匹配時(shí)使用。在這種形式中,一些基本的預(yù)處理(例如宏擴(kuò)展)在#include
指令的“操作數(shù)”上完成,并且結(jié)果預(yù)期與其他兩種形式中的一種匹配。

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
這里的一些好的答案引用了C標(biāo)準(zhǔn),但忘記了POSIX標(biāo)準(zhǔn),特別是c99(例如C編譯器)命令的特定行為。
根據(jù)The Open Group Base Specifications Issue 7,
-I 目錄
在查找常用位置之前,更改搜索名稱不是絕對路徑名的標(biāo)頭的算法,以查找目錄路徑名所指定的目錄。因此,名稱以雙引號(“”)括起來的標(biāo)題應(yīng)首先在#include行的文件目錄中搜索,然后在-I選項(xiàng)中命名的目錄中搜索,最后在通常的位置搜索。對于名稱用尖括號(“<>”)括起來的標(biāo)題,只能在-I選項(xiàng)中指定的目錄中搜索標(biāo)題,然后在通常的位置搜索標(biāo)題。在-I選項(xiàng)中命名的目錄應(yīng)按指定的順序進(jìn)行搜索。c99命令調(diào)用。
因此,在符合POSIX標(biāo)準(zhǔn)的環(huán)境中,使用符合POSIX標(biāo)準(zhǔn)的C編譯器,#include "file.h"
可能會(huì)首先搜索./file.h
,其中.
是帶有#include
語句的文件所在的目錄,同時(shí)#include <file.h>
,可能/usr/include/file.h
首先搜索,/usr/include
系統(tǒng)定義在哪里通常的標(biāo)題位置(似乎沒有POSIX定義)。
- 4 回答
- 0 關(guān)注
- 1123 瀏覽
添加回答
舉報(bào)