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,或者它会处理它自己的依赖关系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”,那么编译器就
我正在使用
#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:
#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"