解决多个包含问题

时间:2013-10-31 12:55:32

标签: c

我有这样的情况。 我有main.c个文件,另有operations.coperations.h个文件。 显然operations.c包括operations.hmain.c也包括operations.h

但后来我发现需要从main.c引用operations.c中实现的功能。但当我将#include "main.c"放入operations.c时,我收到了多个定义的错误。

你如何处理这种情况?

我在一些代码中遇到过,一个人正在使用某种方法。他有"global.h"个文件,其中包含operations.hmain.h(我必须手动创建main.h)。然后从main.coperations.c开始,您只需添加global.h。我认为这种方式多重定义错误消失了。您怎么看?这是处理我上面提到的问题的方法之一吗?

3 个答案:

答案 0 :(得分:3)

这是一种方式,是的。

另一个当然是从main()中移除main.c以外的函数,并将它们放在一个单独的模块中,具有自己的实现(.c)和标题({{1文件。

对于多重包含使用保护通常也是一个好主意,即在每个标题的顶部,执行以下操作:

.h

然后在底部,在所有声明等之后,有:

#if !defined FOO_H_
#define FOO_H_

当然,#endif /* FOO_H_ */ 应该是实际的文件名,即FOO_H_文件中的OPERATIONS_H_,依此类推。

答案 1 :(得分:0)

为标题中的函数声明原型并包含它。它们应该定义一次(在main.c中),但是您可以在声明的许多地方引用它们。

答案 2 :(得分:0)

  

但后来我遇到了需要从operations.c中引用main.c中实现的函数的情况。

如果您有这样的需求,那么您的程序设计就会出现根本性的缺陷。您应该将其更改为面向对象的模型,其中每个模块(h文件+ c文件)都是自治的,除了自己的特定目的之外,不知道或关心任何其他模块。特别是,项目中的单个文件不应具有导致main.c的依赖性。

  

他有“global.h”文件,其中包括operations.h和main.h

这会导致整个程序中出现一些非常糟糕的错误,称为 tight coupling ,其中每个代码模块都依赖于另一个模块。您应该使用面向对象的设计编写C模块,使其尽可能自主,同时尽可能使用 private encapsulation