在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
在include指令中使用尖括号和引号有什么区别?
#包括<文件名>#包括“文件名”
当前回答
#include <filename>
当您想使用C/C++系统或编译器库的头文件时使用。这些库可以是stdio.h、string.h、math.h等。
#include "path-to-file/filename"
当您希望使用自己的自定义头文件(位于项目文件夹或其他位置)时使用。
有关预处理器和标头的详细信息。读取C-预处理器。
其他回答
预处理器的确切行为因编译器而异。以下答案适用于GCC和其他几个编译器。
#include<file.h>告诉编译器在其“include”目录中搜索头文件,例如,对于MinGW,编译器将在C:\MinGW\include\或安装编译器的任何位置搜索file.h。
#include“file”告诉编译器在当前目录(即源文件所在的目录)中搜索文件。
您可以使用GCC的-I标志告诉它,当它遇到带有尖括号的include时,它还应该在-I之后的目录中搜索标头。GCC将把标志后面的目录当作includes目录。
例如,如果您在自己的目录中有一个名为myheader.h的文件,那么如果您使用标志-I调用GCC,可以说#include<myheader.h>。(表示应搜索当前目录中的includes。)
如果没有-I标志,则必须使用#include“myheader.h”来包含文件,或将myheader.h移动到编译器的include目录。
“”将搜索。/第一然后搜索默认包含路径。您可以使用以下命令打印默认包含路径:
gcc -v -o a a.c
以下是一些例子,让事情更清楚:代码交流工作
// a.c
#include "stdio.h"
int main() {
int a = 3;
printf("a = %d\n", a);
return 0;
}
b.c的代码也有效
// b.c
#include <stdio.h>
int main() {
int a = 3;
printf("a = %d\n", a);
return 0;
}
但当我在当前目录中创建名为stdio.h的新文件时
// stdio.h
inline int foo()
{
return 10;
}
a.c将生成编译错误,但b.c仍然有效
和“”,<>可以与相同的文件名一起使用。因为搜索路径优先级不同。所以直流电也起作用
// d.c
#include <stdio.h>
#include "stdio.h"
int main()
{
int a = 0;
a = foo();
printf("a=%d\n", a);
return 0;
}
“<filename>”在标准C库位置搜索而“filename”也会在当前目录中搜索。
理想情况下,您可以使用<…>对于标准C库,“…”表示您编写的当前目录中的库。
#包括<文件名>
预处理器以依赖于实现的方式进行搜索。它告诉编译器搜索系统头文件所在的目录。此方法通常用于查找标准头文件。
#包括“文件名”
这告诉编译器在程序运行的地方搜索头文件。如果失败,它的行为类似于#include<filename>,并在存储系统头文件的位置搜索该头文件。此方法通常用于标识用户定义的头文件(由用户创建的头文件)。如果您想调用标准库,请不要使用它,因为它比#include<filename>需要更多的编译时间。
在引用系统文件时使用#include<filename>。这是一个头文件,可以在系统默认位置(如/usr/include或/usr/local/include)找到。对于需要包含在其他程序中的自己的文件,必须使用#include“filename”语法。