在include指令中使用尖括号和引号有什么区别?

#包括<文件名>#包括“文件名”


当前回答

编译器生成的实现定义的警告可以(并且将)以不同于程序库的方式对待系统库。

So

#包含<myFilename>

--它实际上声明myFilename位于系统库位置——很可能(而且可能会)隐藏死代码和未使用的变量警告等,当您使用:

#包括“myFilename”

其他回答

GCC文件说明了两者之间的区别:

使用预处理指令“#include”包括用户和系统头文件。它有两种变体:#包含<文件>此变体用于系统头文件。它在系统目录的标准列表中搜索名为file的文件。您可以使用-I选项将目录添加到此列表中(请参阅调用)。#包含“文件”此变体用于您自己程序的头文件。它首先在包含当前文件的目录中搜索名为file的文件,然后在引号目录中搜索,然后在与<file>相同的目录中查找。您可以使用-iquote选项将目录添加到报价目录列表中。“#include”的参数(无论是用引号还是尖括号分隔)的行为与字符串常量相似,因为注释无法识别,宏名称也不会展开。因此,#include<x/*y>指定包含名为x/*y的系统头文件。然而,若反斜杠出现在文件中,则它们被视为普通文本字符,而不是转义字符。不处理适用于C中字符串常量的字符转义序列。因此,#include“x\n\\y”指定包含三个反斜杠的文件名。(有些系统将“\”解释为路径名分隔符。所有这些系统也以相同的方式解释“/”。仅使用“/”最为方便。)如果文件名后面的行中有任何内容(注释除外),则为错误。

编译器生成的实现定义的警告可以(并且将)以不同于程序库的方式对待系统库。

So

#包含<myFilename>

--它实际上声明myFilename位于系统库位置——很可能(而且可能会)隐藏死代码和未使用的变量警告等,当您使用:

#包括“myFilename”

#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都用于在程序中添加或包含头文件,但首先是包含系统头文件,然后是用户定义的头文件。

#include<filename>用于在程序中包含系统库头文件,意味着C/C++预处理器将搜索存储C库文件或预定义系统头文件的文件名。#include“filename”用于在程序中包含用户定义的头文件,这意味着C/C++预处理器将在程序所在的当前目录中搜索文件名,然后遵循#include<filename>所使用的搜索路径

检查gcc-docs-gcc-include文件

“<filename>”在标准C库位置搜索而“filename”也会在当前目录中搜索。

理想情况下,您可以使用<…>对于标准C库,“…”表示您编写的当前目录中的库。