可能重複:
What is the difference between #include <filename> and #include 「filename」?爲什麼#include「stdio.h」有效?
當我寫了下面爲什麼不抱怨編譯:
#include "stdio.h"
它不應該是
#include <stdio.h>
而不是,因爲stdio.h實際上存儲在庫文件夾中,而不是存儲在翻譯單元的文件夾中?爲什麼它工作呢?
可能重複:
What is the difference between #include <filename> and #include 「filename」?爲什麼#include「stdio.h」有效?
當我寫了下面爲什麼不抱怨編譯:
#include "stdio.h"
它不應該是
#include <stdio.h>
而不是,因爲stdio.h實際上存儲在庫文件夾中,而不是存儲在翻譯單元的文件夾中?爲什麼它工作呢?
""
和<>
之間的差異並不大。兩者都在實現定義的位置搜索頭文件1,2。不同之處在於,如果""
搜索失敗,搜索就會發生,就好像它使用的是<>
。 (§16.2)
基本上,這意味着如果發現<>
的報頭具有特定名稱,""
不會失敗找到具有相同名稱的報頭。
這些實現定義的地方都沒有成爲這兩種形式是相同的。
沒有要求其中一個搜索庫文件夾和另一個搜索TU的文件夾。如果需要的話,編譯器可以搜索整個文件系統甚至谷歌。
雖然這並不意味着它們總是找到相同的標題。
但是有一個要求,如果'#include「xxx」'失敗,編譯器會重新處理它,就好像它已經'#include
@詹姆斯這就是我打算第三句話的意思。你認爲我應該改寫它,還是你錯過了? –
對於谷歌搜索源文件+1 :-) – Angew
這是因爲include語法是如何定義的。
#include <cstdio>
意味着編譯器應該包括標準庫cstdio
#include "cstdio"
意味着編譯器應該嘗試找到文件「cstdio」,主要是在當前目錄中查找並使用標準庫的位置作爲備用。
無論是「#include」還是「#include」「'查看當前目錄中的所有內容,都完全由實現定義。 –
""
與<>
只改變查找順序。所以用
#include "stdio.h"
預編譯器將翻譯單元的目錄開始查找,然後移動到預定義的「包括」目錄
而
#include <stdio.h>
是周圍的其他方式
@CharlesBailey但在實踐中,通常認爲「...」包括應首先查看包含include文件的目錄。 (另一方面,我認爲任何編譯器都不會在當前目錄中查找包含,除非您通過'-I.'或正在讀取的文件位於當前目錄中。) –
@CharlesBailey,其中我有沒有說** ** current **目錄? – 2012-12-03 13:50:07
@aleguna:對不起,對於「當前目錄」,請閱讀「包含正在編譯的翻譯單元的初始源文件的目錄」。我很懶。 –
'「...」'看起來在本地*先*,然後在其他地方。 – BoBTFish
不,它應該是'#inlcude' –
111111
http://stackoverflow.com/questions/21593/what-is-the-difference-between-include-filename-and-include-filename – BoBTFish