在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
当前回答
编译器生成的实现定义的警告可以(并且将)以不同于程序库的方式对待系统库。
So
#包含<myFilename>
--它实际上声明myFilename位于系统库位置——很可能(而且可能会)隐藏死代码和未使用的变量警告等,当您使用:
#包括“myFilename”
其他回答
#包括<文件名>
预处理器以依赖于实现的方式进行搜索。它告诉编译器搜索系统头文件所在的目录。此方法通常用于查找标准头文件。
#包括“文件名”
这告诉编译器在程序运行的地方搜索头文件。如果失败,它的行为类似于#include<filename>,并在存储系统头文件的位置搜索该头文件。此方法通常用于标识用户定义的头文件(由用户创建的头文件)。如果您想调用标准库,请不要使用它,因为它比#include<filename>需要更多的编译时间。
至少对于GCC版本<=3.0,尖括号形式不会在包含文件和包含文件之间生成依赖关系。
因此,如果您想要生成依赖关系规则(例如,使用GCC-M选项),那么必须使用引用的形式表示应该包含在依赖关系树中的文件。
(参见http://gcc.gnu.org/onlinedocs/cpp/Invocation.html )
这里的许多答案都集中在编译器搜索文件的路径上。虽然这是大多数编译器所做的,但一个符合标准的编译器可以使用标准头的效果进行预编程,并将#include<list>视为一个开关,它根本不需要作为一个文件存在。
这不是纯粹的假设。至少有一个编译器可以这样工作。建议仅对标准标头使用#include<xxx>。
“<filename>”在标准C库位置搜索而“filename”也会在当前目录中搜索。
理想情况下,您可以使用<…>对于标准C库,“…”表示您编写的当前目录中的库。
在引用系统文件时使用#include<filename>。这是一个头文件,可以在系统默认位置(如/usr/include或/usr/local/include)找到。对于需要包含在其他程序中的自己的文件,必须使用#include“filename”语法。