如何处理Typedef而在标头中不包含标头

Oli*_*ver 5 c typedef include

至于处理更大的项目,我想抛出一些自己的类型(例如myType)。“赶入”方法是将这些typedef放入标头中(让我们说myType.h),以及一堆针对这些类型的函数。

如果我在某处使用新类型,则将其包含myType.h到源文件中。精细。

但是,如果要在某处使用新类型作为函数签名中的参数,则需要myType.h在包含该函数的模块的标头中包含。对于一个或另一个typedef,这对我来说似乎还可以,但是我拥有的类型越多,我需要的头文件中包含的内容就越多,可能会包含更多的头文件,同时使用包含其他自己类型的类型。这就是我所说的“ 依赖地狱 ”。

有没有聪明,时尚,最佳实践的方法来解决这一难题?

我知道有可能将这些类型作为空指针传递,然后将它们强制转换回函数内部,但随后我从编译器中放开了重要的类型检查。

此外,extern在这里被认为是最差的做法。

编辑:

详细:

myType.h

#include "otherType.h"

typedef struct {
  char Name[32];
  int Size;
  otherType someType;
} myType;

processSomeHow(myType _myType, int NewSize);
Run Code Online (Sandbox Code Playgroud)

otherType.h

#define SOME_CONST 32

typedef struct { [...] } otherType;
Run Code Online (Sandbox Code Playgroud)

someModule.h

#include "myType.h"

int specialProcessSomeHow(myType _myType);
Run Code Online (Sandbox Code Playgroud)

someModule.c

int specialProcessSomeHow(myType _myType)
{
  int Size = 64;
  return(processSomeHow(_myType, Size));
}
Run Code Online (Sandbox Code Playgroud)

现在,我otherType.h间接地将someModule.h它包含到每个模块中,更糟糕的是,将其包含到someModule.h。现在我SOME_CONST到处都有,很难知道它来自哪里。我必须维护两个包含树。

Jus*_*idt 1

就像在 gtk 库中一样,您可以使用一个头文件并根据需要将其拆分。

type.h
- myType.h
-- someType.h
- otherType.h
- List item
Run Code Online (Sandbox Code Playgroud)

以及你的常量问题:如果你只需要一个 c.file。不要在 HeaderFile 中使用它们。您可以将它们命名为“MY_TYPE_SOME_CONST”或“OTHER_TYPE_SOME_CONST”;

//编辑:

明确地说:只需添加“this.h”文件并为其命名。

#ifndef TYPE_H_
#define TYPE_H_

#include myType.h
#include someType.h
#include otherType.h

#endif /* TYPE_H_ */
Run Code Online (Sandbox Code Playgroud)

现在您可以对您需要类型的每个文件使用“#include this.h”。(this.h 不是真实的,请将其命名为唯一的名称)