#include <filename> 和 #include "filename" 的区别
#include和 #include “filename” 的区别
技术背景
在C和C++编程中,#include
是一个预处理指令,用于将指定文件的内容插入到当前文件中。#include
有两种形式:#include <filename>
和 #include "filename"
。了解它们之间的区别对于正确包含头文件至关重要。
实现步骤
1. #include <filename>
- 预处理器以实现定义的方式搜索文件,通常在编译器或IDE预先指定的目录中搜索。
- 这种方式常用于包含C标准库的头文件以及与目标平台相关的其他头文件。
2. #include "filename"
- 预处理器同样以实现定义的方式搜索文件,但通常用于包含程序员自定义的头文件。
- 通常会先在包含该指令的文件所在的目录中搜索(除非给出了绝对路径)。
3. 不同编译器的搜索规则
- GCC:可以使用
-I
选项指定额外的搜索目录。对于#include <file>
,会先在-I
指定的目录和预定义目录中搜索,然后在.c
文件所在的目录中搜索;对于#include "file"
,会先在源文件所在的目录中搜索,然后再在-I
和预定义目录中搜索。 - MSVS:
#include "filename"
:先在包含#include
语句的文件所在的目录中搜索,然后在当前打开的包含文件的目录中按打开的逆序搜索,接着沿着/I
编译器选项指定的路径搜索,最后沿着INCLUDE
环境变量指定的路径搜索。#include <filename>
:先沿着/I
编译器选项指定的路径搜索,当在命令行编译时,再沿着INCLUDE
环境变量指定的路径搜索。
核心代码
示例1:包含标准库头文件
1 |
|
示例2:包含自定义头文件
1 |
|
最佳实践
- 使用
#include <filename>
:当包含标准库或系统提供的头文件时,使用<>
形式,这样可以明确告诉编译器在系统指定的目录中搜索。 - 使用
#include "filename"
:当包含自己编写的头文件时,使用""
形式,这样可以优先在当前文件所在的目录中搜索。 - 使用
-I
选项:如果需要在特定的目录中搜索头文件,可以使用-I
选项指定目录。
常见问题
1. 文件找不到
- 原因:可能是头文件的路径不正确,或者编译器的搜索路径没有包含头文件所在的目录。
- 解决方法:检查头文件的路径,确保路径正确;使用
-I
选项指定头文件所在的目录。
2. 重复包含
- 原因:如果多个文件包含了同一个头文件,可能会导致重复定义的错误。
- 解决方法:使用头文件保护机制,如
#ifndef
、#define
和#endif
,或者使用#pragma once
(部分编译器支持)。
3. 不同编译器的兼容性问题
- 原因:不同编译器对
#include
的搜索规则可能略有不同。 - 解决方法:查阅编译器的文档,了解其具体的搜索规则,并尽量遵循标准的用法。
#include <filename> 和 #include "filename" 的区别
https://119291.xyz/posts/2025-05-12.difference-between-include-angle-brackets-and-include-quotation-marks/