include 的细节
#include “headername” 和 #include <headername> 的区别
#include "headername" 和 #include <headername> 的主要区别在于头文件的搜索路
径。虽然在包含标准库文件(如 iostream)时,两者的行为通常没有区别,但在实际开发
中,两者有不同的语义,尤其是在包含自定义头文件时。
1.#include “headername”
含义:首先在当前目录(即源文件所在的目录)中搜索头文件。如果没有找到该头文件, 编译器会在标准的系统路径中继续查找。
用法:这种方式常用于包含用户自定义的头文件(非标准库头文件)。
搜索路径:
- 当前源文件所在目录。
- 如果在当前目录找不到头文件,编译器会在标准的包含路径(如 /usr/include/ 或 C:\Program Files...)中继续查找
2.#include <headername>
含义:编译器会直接在系统的标准路径中搜索头文件,而不检查当前目录。
用法:这种方式通常用于包含标准库头文件,例如 iostream、vector 等。
搜索路径:直接在系统的标准头文件路径中查找,不查找当前目录。
区别
- 主要区别是搜索路径:
#include "headername":先查找当前目录,然后再查找系统标准目录。#include <headername>:只查找系统标准目录,不查找当前目录。
- 使用场景:
#include "headername":主要用于用户自定义的头文件,开发者可以将头文件放在 当前项目目录中。#include <headername>:主要用于标准库头文件或系统级头文件,编译器会从系统 的标准路径中查找。
对于标准库头文件(如
#include <iostream>),两者的区别在很多编译器中不大,因 为即使你使用#include "iostream",编译器也会在标准路径中找到标准库头文件。但 是,规范上推荐使用#include <iostream>来包含标准库头文件,因为它更明确且可 以避免潜在的冲突。