#include指令引号与尖括号的区别
參考MS的官方文檔,把include的搜索過程整理了一下——
#include是C/C++的預處理指令(Preprocessor Directive),主要作用是把頭文件引入到任意源文件中,在預處理階段,被包含的文件在源文件的指令地點進行整體替換。#include指令有兩種使用格式,分別是:
兩種不同的指令格式決定了其查找順序的不同.
尖括號的情況
預處理器按照以下順序查找包含文件:
1. 搜索編譯器中由\I 指定的每一個路徑,如Visual Studio中,在項目屬性中可以在C/C++ -> General -> Additional Include Directories中設置;
2. 如果1中沒有找到,那么在INCLUDE環境中指定的路徑中查找,Visual Studio中可以通過VC++ Directories -> Include Directories設置,這里通常的默認值是Windows Kits環境(一些系統庫,如stdio.h)和VS自帶的include文件(如iostream);
通常,在這里設置我們自己的include目錄以及第三方開源庫等(如OpenCV)。
雙引號的情況
預處理器按照以下順序查找包含文件:
1. 先搜索使用#include指令的源文件所在目錄;
2. 在任何先前打開的包含文件中,以打開順序的逆序進行搜索,即搜索從包含文件所在目錄最后被打開的地方開始,到包含路徑首次被打開的路徑為止;這是我個人的理解,這里的打開可能是要告訴編譯器一定的搜索路徑,我不是特別懂,希望哪位大神能告訴我T_T;
3. 從編譯器\I指令指定的路徑搜索;
4. 從INCLUDE目錄設置的路徑進行搜索。
不難看出,其實雙引號的搜索過程是包含尖括號的搜索過程的。
總結
如果是自定義的頭文件,必須使用雙引號,否則會找不到頭文件,出現編譯錯誤;
如果是系統文件,可以用雙引號,也可以用尖括號,但使用雙引號會降低搜索效率,而且存在一定風險,當自定義頭文件和系統頭文件重名時,會把自定義文件作為搜索結果,比如我們自己寫一個stdio.h,使用#include"stdio.h",不會得到系統庫的調用。
總結
以上是生活随笔為你收集整理的#include指令引号与尖括号的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时尚竞聘求职简历PPT模板
- 下一篇: Java-通过IP地址获得域名和主机名