[英]What do they mean by “then in the quote directories”?
在C 預處理器版本 10.0.1 的第 8 頁中,我們有以下聲明:
#include "file"
此變體用於您自己程序的 header 文件。 它首先在包含當前文件的目錄中搜索名為
file
的文件,然后在引用目錄中搜索,然后在用於<file>
的相同目錄中搜索。 您可以使用'-iquote'
選項將目錄添加到引用目錄列表中。
“然后在報價目錄中”是什么意思?
文檔說:
您可以使用“-iquote”選項將目錄添加到引用目錄列表中。
因此,“引用目錄”是那些使用 '-iquote' 選項1作為 arguments 傳遞的目錄。 該選項的文檔說:
-iquote 目錄
僅搜索使用“#include”文件“”請求的 header 文件的目錄; 在 -I 指定的所有目錄之前和標准系統目錄之前,不會搜索“#include <文件>”。 如果 dir 以“=”開頭,則“=”將替換為 sysroot 前綴; 請參見 --sysroot 和 -isysroot。
1從理論上講,來自其他來源。 我不知道引用目錄的任何其他文檔來源; 似乎沒有記錄默認列表。 我假設列表默認為空。
gcc 接受幾種描述包含目錄的命令行參數:
-I
- 在#include <file>
形式的情況下進行搜索,如果其他方法失敗,在#include "file"
形式的情況下進行搜索
-iquote
- 如果在目錄中找不到文件以及包含文件,則僅在#include "file"
形式的情況下搜索。 它定義了這些“引用目錄”。
C 標准是這樣說的:
6.10.2 源文件包含
約束
#include
指令應標識可由實現處理的 header 或源文件。
語義
形式的預處理指令# include < >
在實現定義的位置序列中搜索由
<
和>
分隔符之間的指定序列唯一標識的 header,並導致將該指令替換為 header 的全部內容。 如何指定位置或標識的 header 是實現定義的。
形式的預處理指令# include " "
導致將該指令替換為由
"
分隔符之間的指定序列標識的源文件的全部內容。以實現定義的方式搜索命名的源文件。如果不支持此搜索,或者搜索失敗, 該指令被重新處理,就好像它讀取# include < >
具有與原始指令相同的包含序列(包括
>
字符,如果有的話)。
總之,引用目錄是在搜索標准包含路徑中的目錄之前以實現定義的方式搜索的目錄。
以我的經驗,“引用目錄”不是一個標准術語。 相反,這似乎是對通過#include
的引號形式而不是尖括號形式搜索的那些目錄的臨時描述。 它可能源自用於指定可以找到標題的目錄的命令行選項(在鏈接文檔的第 63-64 頁上介紹)。
-I dir
認為“包含目錄”; dir
被添加到搜索所有#include
指令的目錄列表中。-isystem dir
認為“系統包含目錄”; dir
被添加到具有系統標題的目錄列表(前面)。 (這些頭文件傳統上使用#include
的尖括號形式,但這不是必需的。)由於系統頭文件的目錄由#include
的 forms 搜索,因此此選項在很大程度上與-I
(或者可能是-I
應該被視為在很大程度上是多余的)。-iquote dir
Think "quote include directory"; dir
被添加到(最初為空的)目錄列表中,以搜索以#include
的引號形式指定的標頭。 (這些標題傳統上是您編寫的標題,但這不是強制的。)不會搜索這些目錄以查找尖括號版本。 所以“引用目錄”是標題可以存在於#include
的引用形式但不能用於尖括號形式的目錄。 通常,不需要這種級別的精度,而-I
選項就足夠了。 (因此不需要“引用目錄”的標准術語。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.