在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
当前回答
要使用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(框架目录)搜索列表结束。
其他回答
对于#include“”,编译器通常搜索包含该include的文件的文件夹,然后搜索其他文件夹。对于#include<>,编译器不会搜索当前文件的文件夹。
至少对于GCC版本<=3.0,尖括号形式不会在包含文件和包含文件之间生成依赖关系。
因此,如果您想要生成依赖关系规则(例如,使用GCC-M选项),那么必须使用引用的形式表示应该包含在依赖关系树中的文件。
(参见http://gcc.gnu.org/onlinedocs/cpp/Invocation.html )
<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"
有两种方法可以编写#include语句。它们是:
#include"filename"
#include<filename>
每种形式的含义是
#include"mylib.h"
该命令将查找当前目录中的文件mylib.h以及可能已设置的include搜索路径中提到的指定目录列表。
#include<mylib.h>
此命令将仅在指定的目录列表中查找文件mylib.h。
include搜索路径只是一个目录列表,可以搜索包含的文件。不同的C编译器允许您以不同的方式设置搜索路径。