为什么当我编写以下代码时编译器不抱怨:
#include "stdio.h"
难道不应该
#include <stdio.h>
相反,因为 stdio.h 实际上存储在库文件夹中,而不是在翻译单元的文件夹中?为什么它仍然有效?
为什么当我编写以下代码时编译器不抱怨:
#include "stdio.h"
难道不应该
#include <stdio.h>
相反,因为 stdio.h 实际上存储在库文件夹中,而不是在翻译单元的文件夹中?为什么它仍然有效?
""
和之间的区别<>
不大。两者都在实现定义的位置1, 2中搜索标题。不同之处在于,如果该搜索失败 ""
,则搜索就像使用<>
. (§16.2)
基本上,这意味着如果<>
找到具有特定名称的标头,""
则不会找不到具有相同名称的标头3。
1对于两种形式,这些实现定义的位置不必相同。
2不要求其中一个搜索库文件夹,另一个搜索 TU 的文件夹。允许编译器搜索整个文件系统,如果需要,甚至可以在 Google 上搜索。
3不过,这并不意味着它们总能找到相同的标头。
这是因为包含语法是如何定义的。
#include <cstdio>
表示编译器应该包含标准库 cstdio
#include "cstdio"
意味着编译器应该尝试查找文件“cstdio”,主要查看当前目录并使用标准库的位置作为后备。
""
与<>
仅更改查找顺序。
所以与
#include "stdio.h"
预编译器将从翻译单元的目录开始查找,然后移动到预定义的“包含”目录
然而
#include <stdio.h>
是其他方式