在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
当前回答
<和>之间的字符序列唯一地引用标头,而标头不一定是文件。实现可以随意使用字符序列。(不过,大多数情况下,只需将其作为文件名,并在include路径中进行搜索,正如其他帖子所述。)
如果使用#include“file”表单,则实现首先查找给定名称的文件(如果支持)。如果不支持(受支持),或者搜索失败,那么实现的行为就像使用了另一个(#include<file>)表单一样。
此外,存在第三种形式,当#include指令与上述任何一种形式都不匹配时,将使用第三种。在这种形式中,对#include指令的“操作数”进行了一些基本的预处理(如宏扩展),结果预计将与其他两种形式中的一种匹配。
其他回答
至少对于GCC版本<=3.0,尖括号形式不会在包含文件和包含文件之间生成依赖关系。
因此,如果您想要生成依赖关系规则(例如,使用GCC-M选项),那么必须使用引用的形式表示应该包含在依赖关系树中的文件。
(参见http://gcc.gnu.org/onlinedocs/cpp/Invocation.html )
简单的通用规则是使用尖括号来包含编译器附带的头文件。使用双引号包含任何其他头文件。大多数编译器都是这样做的。
1.9-头文件更详细地解释了预处理器指令。如果你是一个新手程序员,那么这个页面应该可以帮助你理解所有这些。我从这里学到了这一点,我一直在工作中遵循这一点。
在引用系统文件时使用#include<filename>。这是一个头文件,可以在系统默认位置(如/usr/include或/usr/local/include)找到。对于需要包含在其他程序中的自己的文件,必须使用#include“filename”语法。
一般来说,区别在于预处理器搜索头文件的位置:
#include是包含头文件的预处理器指令。两个#include都用于在程序中添加或包含头文件,但首先是包含系统头文件,然后是用户定义的头文件。
#include<filename>用于在程序中包含系统库头文件,意味着C/C++预处理器将搜索存储C库文件或预定义系统头文件的文件名。#include“filename”用于在程序中包含用户定义的头文件,这意味着C/C++预处理器将在程序所在的当前目录中搜索文件名,然后遵循#include<filename>所使用的搜索路径
检查gcc-docs-gcc-include文件
带有尖括号的#include将搜索“依赖于实现的位置列表”(这是一种非常复杂的方式来表示“系统头”)以查找要包含的文件。
带引号的#include将只搜索文件(并且,“以依赖于实现的方式”,bleh)。这意味着,在正常的英语中,它将尝试应用你扔给它的路径/文件名,而不会预先设置系统路径或篡改它。
此外,如果#include“”失败,则标准会将其重新读取为#include<>。
gcc文档有一个(特定于编译器的)描述,虽然它是特定于gcc而非标准的,但它比ISO标准的律师式描述更容易理解。