Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C <;标准h>;及;“stdio.h”是什么;?_C - Fatal编程技术网

C <;标准h>;及;“stdio.h”是什么;?

C <;标准h>;及;“stdio.h”是什么;?,c,C,可能重复: 在这两种情况下都没有错误…它们之间有什么区别吗?I如果是“…”编译器首先在本地目录中搜索头文件,其中 您的.c文件将显示 而对于编译器,仅在头文件文件夹中搜索第二个版本被指定为首先在实现定义的位置搜索,然后如果找不到该文件,则在与版本相同的位置搜索,它在通常由-I命令行选项和内置include路径(指向标准库和系统头的位置)指定的路径中进行搜索 通常,实现将该位置定义为相对于包含文件的位置。在标准C库位置中搜索,而“stdio.h”也在当前目录中搜索 理想情况下,您可以将用于标准C

可能重复:

在这两种情况下都没有错误…它们之间有什么区别吗?

I如果是
“…”
编译器首先在本地目录中搜索头文件,其中 您的.c文件将显示


而对于
编译器,仅在头文件文件夹中搜索第二个版本被指定为首先在实现定义的位置搜索,然后如果找不到该文件,则在与
版本相同的位置搜索,它在通常由
-I
命令行选项和内置include路径(指向标准库和系统头的位置)指定的路径中进行搜索

通常,实现将该位置定义为相对于包含文件的位置。

在标准C库位置中搜索,而
“stdio.h”
也在当前目录中搜索

理想情况下,您可以将
用于标准C库,将
“…”
用于您编写并存在于当前目录中的库。

\include
用于系统头,而
\include“something.h”
用于您自己程序的头。系统标题在常用系统目录(以及
-I
参数中包含的目录)中搜索,您的标题在当前目录中搜索,然后在与系统标题相同的位置搜索


请参见

有关我使用的编译器,“…”开始在与正在编译的源文件相同的目录中查找包含文件,然后查找包含路径。include with start在include路径中,跳过当前骰子,除非它在include路径中。

通常标准头文件由<>括起,其他用户特定文件由“

指定,告诉编译器在库的头文件中查找该文件并”“让它查看应用程序的标题

至于为什么它们都适用于您,也许您的编译器也会在库头中查找文件名,以防在您的库头中找不到文件名。

指的是头文件(不是头文件)
“stdio.h”
指的是源文件

实现中不需要物理上存在头;它们的标识方式由实现定义(通常标题是特定目录上的文件)


当指令使用
”时,将以实现定义的方式搜索源文件,如果未找到,则将重新处理指令,就像它首先是用
编写的一样。

不同之处在于,开发人员制作的头文件由“。系统中已存在的头文件随附。如果放置的目录不在编译器的搜索路径中,则即使是头也需要-I指令


底线:您的标题带有“”,系统标题带有

当您想说:“在系统的include目录中查找具有此名称的文件”时,您可以使用#include。如果您想说:“在我自己的应用程序的include目录中查找具有此名称的文件;但是,如果找不到,请在系统的include目录中查找。”

您的意思是,如果我的*.c文件不在标准c库所在的目录中,则会出现错误?否,因为不管怎么说它看起来都在那里。我怀疑你的c文件是否在标准的c文件夹中。如果您使用
“…”
,唯一的区别是您的
.h
文件将在当前目录以及标准C库位置中搜索。我对C99的措辞感到困惑。这是否意味着
#include
无效,因为
unistd.h
不是标题?或者它使用“header”表示
,而使用“source file”表示
“…”
,还有另一个原因吗?再读一遍,似乎并不是说标准头只构成了一组头。所以可以有实现定义的头,比如posix头等等。@litb:我认为
unistd.h
是一个头,如果实现(或者在本例中是posix标准,实现也实现了该标准)说它是头的话。它不是一个标准头,但我不认为C99标准禁止实现允许标准头以外的头。我也找不到任何明确允许它的地方,只有关于从标识符到实现定义的头的映射的文本。我认为
unistd.h
是一个头,如果实现这么说的话。标准对包含非标题的内容的效果保持沉默。显然,我的实现将
unistd.h
定义为一个头,但没有定义
windows.h
。。。