C stdio包含在头文件中

C stdio包含在头文件中,c,include,header-files,stdio,C,Include,Header Files,Stdio,我不完全确定,但这看起来不对: 我有一个名为fraction.h的头文件,其中存储了一个分数结构和处理它的方法,一个方法用于在文件中写入分数,在这个函数的签名中,一个参数是文件指针 分数h: c部分: 当然,我在程序中包括分数.h。 但我一直在犯这样的错误: fraction.h:34:54:错误:未知类型名称“文件” 有人可以解释编译器包含文件的不同步骤吗? 因为在分数.c中,所以为什么会出现这种未找到的类型错误 我是否应该将包含在分数.h中?从我微薄的经验来看,这似乎不太合适。当预处理器处理

我不完全确定,但这看起来不对:

我有一个名为fraction.h的头文件,其中存储了一个分数结构和处理它的方法,一个方法用于在文件中写入分数,在这个函数的签名中,一个参数是文件指针

分数h:

c部分:

当然,我在程序中包括分数.h。 但我一直在犯这样的错误:

fraction.h:34:54:错误:未知类型名称“文件”

有人可以解释编译器包含文件的不同步骤吗? 因为
分数.c中,所以为什么会出现这种未找到的类型错误


我是否应该将
包含在分数.h中?从我微薄的经验来看,这似乎不太合适。

当预处理器处理一个文件时,它会将包含的文件的内容复制到被预处理的文件中。在
fraction.c
中没有得到该错误的原因是
stdio.h
的内容包含在
fraction.h
之前

因此预处理的文件
fragments.c
如下所示:

    stdio.h contents
    fragment.h contents
    fragment.c contents
请注意,
文件
定义将通过
stdio.h
包含,然后在
fragment.h
中引用


您应该在分数.h中包含
stdio.h
,以消除此错误。

在程序\u test.c中包含stdio.h。如果程序_test.c(包括fraction.h)中没有包含stdio.h,编译器将不知道fraction.h使用的文件的定义,并生成错误


而且,在编译
程序测试时,确实应该在分数.h中包含stdio.h,编译器不会查看其他.c文件,只查看实际编译文件中包含的文件

因此,您要么在测试程序中包含
,就像在
fraction.c
中一样,要么将其包含在头文件中


尽管C标准表示标准库文件将不包含彼此,但没有任何迹象表明用户定义的文件不能做到这一点。事实上,如果使用它们,通常会更容易。

您还必须在program_test.c中包含
。感谢您的明确说明,您能否提供一些链接,详细解释如何从一组源文件构建可执行文件?并不是说我没有得到你的答案(我得到了),而是关于你的stackoverflow积分,我打赌你有好地方可以推荐。也许是这个?还是这个
#include <stdio.h>
#include "fraction.h"
...
program_test: fraction.o program_test.o
    stdio.h contents
    fragment.h contents
    fragment.c contents