7

可能重复:
#include <文件名> 和#include “文件名”有什么区别?

为什么当我编写以下代码时编译器不抱怨:

#include "stdio.h"

难道不应该

#include <stdio.h>

相反,因为 stdio.h 实际上存储在库文件夹中,而不是在翻译单元的文件夹中?为什么它仍然有效?

4

3 回答 3

10

""和之间的区别<>不大。两者都在实现定义的位置1, 2中搜索标题。不同之处在于,如果该搜索失败 "",则搜索就像使用<>. (§16.2)

基本上,这意味着如果<>找到具有特定名称的标头,""则不会找不到具有相同名称的标头3


1对于两种形式,这些实现定义的位置不必相同。

2不要求其中一个搜索库文件夹,另一个搜索 TU 的文件夹。允许编译器搜索整个文件系统,如果需要,甚至可以在 Google 上搜索。

3不过,这并不意味着它们总能找到相同的标头。

于 2012-12-03T13:41:06.330 回答
1

这是因为包含语法是如何定义的。

#include <cstdio>表示编译器应该包含标准库 cstdio

#include "cstdio"意味着编译器应该尝试查找文件“cstdio”,主要查看当前目录并使用标准库的位置作为后备。

于 2012-12-03T13:40:43.200 回答
1

""<>仅更改查找顺序。

所以与

#include "stdio.h"

预编译器将从翻译单元的目录开始查找,然后移动到预定义的“包含”目录

然而

#include <stdio.h>

是其他方式

于 2012-12-03T13:42:01.480 回答