在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
当前回答
有两种方法可以编写#include语句。它们是:
#include"filename"
#include<filename>
每种形式的含义是
#include"mylib.h"
该命令将查找当前目录中的文件mylib.h以及可能已设置的include搜索路径中提到的指定目录列表。
#include<mylib.h>
此命令将仅在指定的目录列表中查找文件mylib.h。
include搜索路径只是一个目录列表,可以搜索包含的文件。不同的C编译器允许您以不同的方式设置搜索路径。
其他回答
<和>之间的字符序列唯一地引用标头,而标头不一定是文件。实现可以随意使用字符序列。(不过,大多数情况下,只需将其作为文件名,并在include路径中进行搜索,正如其他帖子所述。)
如果使用#include“file”表单,则实现首先查找给定名称的文件(如果支持)。如果不支持(受支持),或者搜索失败,那么实现的行为就像使用了另一个(#include<file>)表单一样。
此外,存在第三种形式,当#include指令与上述任何一种形式都不匹配时,将使用第三种。在这种形式中,对#include指令的“操作数”进行了一些基本的预处理(如宏扩展),结果预计将与其他两种形式中的一种匹配。
表格1-#include<xxx>
首先,在调用指令的当前目录中查找头文件的存在。如果未找到,则在预配置的标准系统目录列表中进行搜索。
表格2-#包括“xxx”
这将查找在调用指令的当前目录中是否存在头文件。
确切的搜索目录列表取决于目标系统、GCC的配置方式以及安装位置。通过使用-v选项运行GCC编译器,可以找到GCC编译器的搜索目录列表。
您可以使用-Idir将其他目录添加到搜索路径中,这会导致在当前目录之后(对于指令的引号形式)和标准系统目录之前搜索dir。
基本上,表单“xxx”只是在当前目录中搜索;如果未找到,则返回表单
这里的许多答案都集中在编译器搜索文件的路径上。虽然这是大多数编译器所做的,但一个符合标准的编译器可以使用标准头的效果进行预编程,并将#include<list>视为一个开关,它根本不需要作为一个文件存在。
这不是纯粹的假设。至少有一个编译器可以这样工作。建议仅对标准标头使用#include<xxx>。
#include "filename" // User defined header
#include <filename> // Standard library header.
例子:
这里的文件名是Seller.h:
#ifndef SELLER_H // Header guard
#define SELLER_H // Header guard
#include <string>
#include <iostream>
#include <iomanip>
class Seller
{
private:
char name[31];
double sales_total;
public:
Seller();
Seller(char[], double);
char*getName();
#endif
在类实现中(例如,Seller.cpp,以及将使用文件Seller.h的其他文件中),现在应该包含用户定义的头,如下所示:
#include "Seller.h"
“<filename>”在标准C库位置搜索而“filename”也会在当前目录中搜索。
理想情况下,您可以使用<…>对于标准C库,“…”表示您编写的当前目录中的库。