在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
当前回答
#include <file>
包含默认包含目录所在的文件。
#include "file"
在编译文件的当前目录中包含文件。双引号还可以指定到其他位置的完整文件路径。
其他回答
#include <abc.h>
用于包含标准库文件。因此编译器将检查标准库头所在的位置。
#include "xyz.h"
将告诉编译器包含用户定义的头文件。因此编译器将在当前文件夹或-I定义的文件夹中检查这些头文件。
#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"
<和>之间的字符序列唯一地引用标头,而标头不一定是文件。实现可以随意使用字符序列。(不过,大多数情况下,只需将其作为文件名,并在include路径中进行搜索,正如其他帖子所述。)
如果使用#include“file”表单,则实现首先查找给定名称的文件(如果支持)。如果不支持(受支持),或者搜索失败,那么实现的行为就像使用了另一个(#include<file>)表单一样。
此外,存在第三种形式,当#include指令与上述任何一种形式都不匹配时,将使用第三种。在这种形式中,对#include指令的“操作数”进行了一些基本的预处理(如宏扩展),结果预计将与其他两种形式中的一种匹配。
<file>include告诉预处理器首先在-I目录和预定义目录中搜索,然后在.c文件的目录中搜索。“file”include告诉预处理器首先搜索源文件的目录,然后返回到-I并预定义。无论如何都会搜索所有目的地,只是搜索顺序不同。
2011年标准主要讨论了“16.2源文件包含”中的包含文件。
2表单的预处理指令#包含<h-char-sequence>新行在实现定义的位置序列中搜索由在<和>分隔符之间指定的序列,并导致用标题的全部内容替换该指令。如何指定位置或标识标题定义了实现。3表单的预处理指令#包括“q-char-sequence”新行导致将该指令替换为在“分隔符”之间指定的序列。命名的源文件是以实现定义的方式搜索。如果此搜索是不受支持,或者如果搜索失败,指令将被重新处理为如果它读#包含<h-char-sequence>新行与原始指令相同的包含序列(包括>个字符,如果有)。
请注意,如果找不到文件,“xxx”格式将降级为<xxx>格式。其余部分由实现定义。
按照标准-是的,它们是不同的:
表单的预处理指令#包含<h-char-sequence>新行在实现定义的位置序列中搜索由<和>分隔符之间的指定序列唯一标识的头,并用头的全部内容替换该指令。如何指定位置或标识标题是实现定义的。表单的预处理指令#包括“q-char-sequence”新行导致用“分隔符”之间的指定序列标识的源文件的全部内容替换该指令。将以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败,则会像读取指令一样重新处理该指令#包含<h-char-sequence>新行具有与原始文件相同的包含序列(包括>个字符,如果有)指令。表单的预处理指令#包含pp令牌新行(与前两种形式之一不匹配)。指令中include之后的预处理标记与普通文本中的处理相同。(当前定义为宏名称的每个标识符由其预处理令牌的替换列表替换。)所有替换后产生的指令应与前两种形式之一匹配。实现定义了一种方法,通过该方法,<和>预处理令牌对或一对“字符”之间的一系列预处理令牌组合成单个标头名称预处理令牌。定义:h-char:源字符集的任何成员,除了换行符和>q-char:源字符集的任何成员,除了换行符和“
注意,标准没有说明实现定义的方式之间的任何关系。第一个表单以一种实现定义的方式进行搜索,另一个表单以(可能是其他)实现定义的方法进行搜索。该标准还规定应存在某些包含文件(例如,<stdio.h>)。
从形式上讲,您必须阅读编译器的手册,但通常(按照传统)#include“…”表单会搜索首先找到#include的文件目录,然后搜索#include<…>的目录表单搜索(包括路径,例如系统标题)。