0

我有过这样的情况。我有main.c文件,还有一个operations.c文件operations.h。明明operations.c包括operations.h, 也main.c包括operations.h

但是后来我遇到了需要引用main.cfrom中实现的函数的情况operations.c。但是当我输入时#include "main.c"operations.c我得到了关于多个定义的错误。

你如何处理这种情况?

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

4

3 回答 3

3

这是一种方式,是的。

另一个当然是删除 from 以外的函数main()main.c并将它们放在一个单独的模块中,并带有自己的 implementation ( .c) 和 header ( .h) 文件。

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

#if !defined FOO_H_
#define FOO_H_

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

#endif /* FOO_H_ */

当然,FOO_H_应该是实际的文件名,即OPERATIONS_H_在你的operations.h文件中等等。

于 2013-10-31T13:00:01.990 回答
0

在标头中声明所需功能的原型并将其包含在内。它们应该只定义一次(例如,在 中main.c),但您可以在许多地方通过声明引用它们。

于 2013-10-31T13:07:48.833 回答
0

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

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

He had "global.h" file which would include operations.h and main.h

This leads to something very bad called tight coupling all over your program, where every code module depends on another module. You should write C modules with object-oriented design, making them autonomous, while using private encapsulation as much as possible.

于 2013-10-31T13:51:04.223 回答