c - 如何在标题中不包含标题的情况下处理 typedef

标签 c include typedef

至于在更大的项目上工作,我想加入一些自己的类型(例如 myType)。 “突入”的方法是,将这些 typedef 放入 header 中(比方说 myType.h),以及一组处理这些类型的函数。

如果我在某处使用新类型,我会将 myType.h 包含到我的源文件中。很好。

但是如果我想在某处使用新类型作为函数签名中的参数,我需要将 myType.h 包含到包含该函数的模块的 header 中。使用一个或另一个 typedef,这对我来说似乎没问题,但我拥有的类型越多,我需要的标题中包含的内容就越多,可能包括更多标题,同时使用类型包括其他自己的类型。这导致了我所说的“依赖 hell ”。

是否有一种聪明、时尚、最佳实践的方法来解决这个难题?

我知道可以将这些类型作为 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 并且很难弄清楚它来自哪里。我必须维护两个包含树。

最佳答案

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

type.h
- myType.h
-- someType.h
- otherType.h
- List item

关于您的 CONST 问题: 如果你只需要一个 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_ */

现在您可以为每个需要类型的文件使用“#include this.h”。 (this.h 不是真实的,给它起一个独特的名字)

关于c - 如何在标题中不包含标题的情况下处理 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15611397/

相关文章:

C++ Typedef 签名

C 编程 vfork 返回值

c - 替换 Vim 中的项目而不替换旧的替换项目

c++ - cpp中dll的引用类

include - 为什么缺少 "require"/"include"会额外调用 error_handler 一次?

c - 如何在c中为字符串创建类型定义

c - 使用 C 中的方矩阵查找函数(求和、减法、乘法)中的错误

c - fork 调用不执行子代码

php - 换行符在 PHP 中意外出现

c++ - 无法识别 .h 文件中定义的 typedef 类型