Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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 我是否需要包含包含的文件所依赖的文件?_C - Fatal编程技术网

C 我是否需要包含包含的文件所依赖的文件?

C 我是否需要包含包含的文件所依赖的文件?,c,C,我在一个目录中有一个名为coderTest.C的C程序。在子目录src中,我有几个文件,一个.c,两个.c,三个.c,以及它们相关的头文件一个.h,两个.h,三个.h 我想在coderTest.c中使用one.c和two.c中的函数。one.c和two.c都使用来自three.c的函数。我是否需要在coderTest.c中包含三个.c,或者它会处理它自己的依赖关系 我正在使用#include“src/one.h”来表示一和二。只要two.c和one.c正确地#包括“three.h”,那么编译器就

我在一个目录中有一个名为coderTest.C的C程序。在子目录src中,我有几个文件,一个.c,两个.c,三个.c,以及它们相关的头文件一个.h,两个.h,三个.h

我想在coderTest.c中使用one.c和two.c中的函数。one.c和two.c都使用来自three.c的函数。我是否需要在coderTest.c中包含三个.c,或者它会处理它自己的依赖关系


我正在使用
#include“src/one.h”
来表示一和二。

只要
two.c
one.c
正确地
#包括“three.h”
,那么编译器就能够毫无问题地将依赖项链接在一起。如果您想从
coderTest.c
中的
three.c
运行某个东西,它会希望您也将它包含在那里

您的文件是否具有预处理器指令
#IFNDEF
#DEFINE
#ENDIF
,以防止重复导入

我需要在coderTest.c中包含三个.c吗,或者它会处理吗 这是对自己的依赖

您不需要在
coderTest.c
中包含
“src/three.h”
,但这并不意味着编译器会自动处理依赖关系。此标题需要包含在
one.c
two.c
three.c
中。最后一个是确认头的声明和定义彼此正确匹配

因此,您的项目可能看起来像:

coderTest.c
src/one.c
src/two.c
src/three.c

要防止同一头文件的多个包含,请分别对每个头文件使用。

在coderTest.c中,包括以下内容:
#包括“src/two.h
#包括“src/one.h

在1.c中,包括:
#包括“src/three.h

在二.c中,包括:
#包括“src/three.h

我是否需要在coderTest.c中包含三个.c,或者它会处理它自己的依赖关系


不,您不需要在coderTest.c中包含三个.c,因为一个.c和两个.c会将其抽象出来。

您可以通过多种方式完成您想要的任务,只要提供对必要原型的可见性。除了最好包含头文件之外,还可以考虑使用<强> <强>来保证您的头只使用一次:

 #ifndef _SOMEFILE_H_
 #define _SOMEFILE_H_

     the entire file

 #endif /* SOMEFILE_H__SEEN */  

也考虑可读性。例如:coderTest.c、一个.c/.h、两个.c/.h、三个.c/.h如您所述:
1)您应该在one.c和two.c中都包含三个.h.
2)对于coderTest.c,在文件本身中或在收集器头中包含所有支持头的头:conderTest.h:

coderTest.h:

#include "./src/one.h"
#include "./src/two.h"
#include "./src/three.h"
#include "coderTest.h"
coderTest.c

#include "./src/one.h"
#include "./src/two.h"
#include "./src/three.h"
#include "coderTest.h"

不,编译器知道什么取决于什么。只需将正确的文件
#包括在one.c和two.c中的“three.h;
”在特定的翻译单元all(且仅限于此)中即可应包含该特定单元所需的标题。不依赖于其他标题已经包含这些标题的事实/可能性。同样,不要设计任何依赖于事实/可能性的标题,这些事实/可能性以前包含过其他标题。指令应为小写
#include "./src/one.h"
#include "./src/two.h"
#include "./src/three.h"
#include "coderTest.h"