至于从事一个更大的项目,我想加入一些自己的类型(例如myType
)。“冲进来”的方法是将这些类型定义放入标题中(比如说myType.h
),以及处理这些类型的一堆函数。
如果我在某处使用新类型,我会将其包含myType.h
到我的源文件中。美好的。
但是,如果我想在某处使用新类型作为函数签名中的参数,我需要将 包含myType.h
到包含该函数的模块的标头中。使用一个或另一个 typedef,这对我来说似乎没问题,但是我拥有的类型越多,我需要的头文件中包含的内容就越多,可能包括更多的头文件,同时使用包含其他自己类型的类型。这导致了我所说的“依赖地狱”。
有没有一种聪明、时尚、最佳实践的方法来解决这个困境?
我知道将这些类型作为 void-pointer 传递的可能性,将它们强制转换回函数内部,但随后我失去了编译器的重要类型检查。
此外,extern
这里被认为是最糟糕的做法..
编辑:
详细地:
myType.h
:
#include "otherType.h"
typedef struct {
char Name[32];
int Size;
otherType someType;
} myType;
processSomeHow(myType _myType, int NewSize);
otherType.h
#define SOME_CONST 32
typedef struct { [...] } otherType;
someModule.h
:
#include "myType.h"
int specialProcessSomeHow(myType _myType);
someModule.c
:
int specialProcessSomeHow(myType _myType)
{
int Size = 64;
return(processSomeHow(_myType, Size));
}
现在我otherType.h
间接包含到. 甚至更糟糕的是,我将它包含到每个模块中,someModule.h
包括 someModule.h
现在我SOME_CONST
到处都有,很难弄清楚它来自哪里。我必须维护两个包含树。