在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
当前回答
在引用系统文件时使用#include<filename>。这是一个头文件,可以在系统默认位置(如/usr/include或/usr/local/include)找到。对于需要包含在其他程序中的自己的文件,必须使用#include“filename”语法。
其他回答
不同的是预处理器搜索要包含的文件的位置。
#include<filename>预处理器以实现定义的方式进行搜索,通常在编译器/IDE预先指定的目录中进行搜索。此方法通常用于包含C标准库的头文件和与目标平台相关联的其他头文件。#include“filename”预处理器也以实现定义的方式进行搜索,但通常用于包括程序员定义的头文件,并且通常包括与包含指令的文件相同的目录(除非给出了绝对路径)。
对于GCC,可以在GCC文档中找到关于搜索路径的更完整描述。
#include <abc.h>
用于包含标准库文件。因此编译器将检查标准库头所在的位置。
#include "xyz.h"
将告诉编译器包含用户定义的头文件。因此编译器将在当前文件夹或-I定义的文件夹中检查这些头文件。
<file>include告诉预处理器首先在-I目录和预定义目录中搜索,然后在.c文件的目录中搜索。“file”include告诉预处理器首先搜索源文件的目录,然后返回到-I并预定义。无论如何都会搜索所有目的地,只是搜索顺序不同。
2011年标准主要讨论了“16.2源文件包含”中的包含文件。
2表单的预处理指令#包含<h-char-sequence>新行在实现定义的位置序列中搜索由在<和>分隔符之间指定的序列,并导致用标题的全部内容替换该指令。如何指定位置或标识标题定义了实现。3表单的预处理指令#包括“q-char-sequence”新行导致将该指令替换为在“分隔符”之间指定的序列。命名的源文件是以实现定义的方式搜索。如果此搜索是不受支持,或者如果搜索失败,指令将被重新处理为如果它读#包含<h-char-sequence>新行与原始指令相同的包含序列(包括>个字符,如果有)。
请注意,如果找不到文件,“xxx”格式将降级为<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"
它确实:
"mypath/myfile" is short for ./mypath/myfile
具有是#include所在文件的目录和/或编译器的当前工作目录,和/或default_include_path
and
<mypath/myfile> is short for <defaultincludepaths>/mypath/myfile
如果./在<default_include_paths>中,则不会有任何区别。
如果mypath/myfile位于另一个include目录中,则行为未定义。