昨天写错了#include "iostream"
,还没意识到,因为编译器没有报错。后来我意识到了,我很惊讶。
我试过这个小程序:
// Fichero a.h
#ifndef A_H
#define A_H
#endif // A_H
// Fichero a.cpp
#include <iostream>
#include "a.h"
int main(void) {
std::cout << "Hola Mundo" << std::endl;
return 0;
}
哪个按预期工作。
如果我将这两个包含用双引号括起来,它也可以工作" "
,这让我感到惊讶。
如果我把这两个包含次要的主要< >
它给我一个编译错误,这是我所期望的:
a.cpp:2:15:致命错误:啊:没有这样的文件或目录
我以为 :
#include < >
它用于系统头文件或库。#include " "
它适用于程序员头文件。
但显然不是因为 iostream 也可以包含在" "
.
我可以将它全部包含在 中" "
吗?
或者它会对做任何事情产生一些不利影响" "
?如果是这样,使用什么标准来决定每个包含是否使用" "
or完成< >
?
实际上,这两种包含不一定可以互换。
这种类型的包含尝试在系统目录中定位文件。如果找不到相关文件,则构建将终止并出现错误。
此其他包含在当前文件所在的文件夹中查找文件。如果搜索不成功,则尝试在系统目录中定位该文件。因此,此包含比带括号的版本更完整。
尽管如果引用了所有包含,项目可以编译得很好,但这不是一个特别好的做法。请记住,c++构建可能会很无聊。强制编译器进行通用查找无助于减少编译时间。包含带括号的系统库会减少搜索范围,从而显着缩短编译时间(显然项目越大,这种效果就越明显)。
另一方面,区分本地(带引号)和系统(带括号)包括略微增加代码的可读性。它使您可以快速了解相关文件是否在项目目录中,或者另一方面,它是否对应于外部库。