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

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


当前回答

在引用系统文件时使用#include<filename>。这是一个头文件,可以在系统默认位置(如/usr/include或/usr/local/include)找到。对于需要包含在其他程序中的自己的文件,必须使用#include“filename”语法。

其他回答

不同的是预处理器搜索要包含的文件的位置。

#include<filename>预处理器以实现定义的方式进行搜索,通常在编译器/IDE预先指定的目录中进行搜索。此方法通常用于包含C标准库的头文件和与目标平台相关联的其他头文件。#include“filename”预处理器也以实现定义的方式进行搜索,但通常用于包括程序员定义的头文件,并且通常包括与包含指令的文件相同的目录(除非给出了绝对路径)。

对于GCC,可以在GCC文档中找到关于搜索路径的更完整描述。

#include <filename>

当您想使用C/C++系统或编译器库的头文件时使用。这些库可以是stdio.h、string.h、math.h等。

#include "path-to-file/filename"

当您希望使用自己的自定义头文件(位于项目文件夹或其他位置)时使用。

有关预处理器和标头的详细信息。读取C-预处理器。

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

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

了解的唯一方法是阅读实现的文档。

在C标准第6.10.2节第2至4段中规定:

表单的预处理指令#包含<h-char-sequence>新行在实现定义的位置序列中搜索由<和>分隔符之间的指定序列唯一标识的头,并用头的全部内容替换该指令。如何指定位置或标识标题是实现定义的。表单的预处理指令#包括“q-char-sequence”新行导致用“分隔符”之间的指定序列标识的源文件的全部内容替换该指令。将以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者搜索失败,则会像读取指令一样重新处理该指令#包含<h-char-sequence>新行具有与原始文件相同的包含序列(包括>个字符,如果有)指令。表单的预处理指令#包含pp令牌新行(与前两种形式之一不匹配)。指令中include之后的预处理标记与普通文本中的处理相同。(当前定义为宏名称的每个标识符由其预处理令牌的替换列表替换。)所有替换后产生的指令应与前两种形式之一匹配。实现定义了一种方法,通过该方法,<和>预处理令牌对或一对“字符”之间的一系列预处理令牌组合成单个标头名称预处理令牌。定义:h-char:源字符集的任何成员,除了换行符和>q-char:源字符集的任何成员,除了换行符和“

要使用gcc查看系统上的搜索顺序,根据当前配置,可以执行以下命令。您可以在此处找到有关此命令的详细信息

cpp-v/dev/null-o/dev/null

Apple LLVM版本10.0.0(clang-1000.10.44.2)目标:x86_64-apple-darwin18.0.0线程模型:posix InstalledDir:Library/Developer/CommandLineTools/usr/bin“/Library/Developer/CommandLineTools/usr/bin/clag”-cc1-三重x86_64-apple-macsx10.14.0-不推荐使用objc-Weror=已弃用的objc isa用法-E-禁用free-禁用llvm验证器-丢弃值名称-主文件名null-mrelocation model pic-pic level 2-mthread model posix-mdisable fp elim-fno strict return-masm verbose-munwind tables-target cpu penryn-dwarf column info-debugger tuning=lldb-target linker version 409.12-v-resource-dir/库/开发人员/命令行工具/usr/lib/clag/10.0.0-isysroot/库/开发人员/命令行工具/sdk/MacOSX10.14.sdk-我/usr/local/include-fdebug compilation dir/Users/hogstrom-fferror limit 19-fmessage长度80-堆栈保护器1-fblocks-fencode扩展块签名-fbojc runtime=macosx-10.14.0-fmax type align=16-fdiagnostics show option-fcolor diagnostics-传统cpp-o-x c/dev/nullclang-cc1版本10.0.0(clang-1000.10.44.2)默认目标x86_64-apple-darwin18.0.0忽略不存在的目录“/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/local/include”忽略不存在的目录“/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/Libraries/Frameworks”#包括“…”搜索从这里开始:#包括<…>搜索从这里开始:/usr/local/include/库/开发人员/命令行工具/usr/lib/clag/10.0.0/include/库/开发人员/命令行工具/usr/include/库/开发人员/命令行工具/sdk/MacOSX10.14.sdk/usr/include/库/开发人员/命令行工具/SDKs/MacOSX10.14.sdk/System/Library/Frameworks(框架目录)搜索列表结束。