1

我正在开发一个相当简单的 C 程序,其中包含一个主文件 vector.c、vector.h,但我遇到了这些问题:

  • 如果在两个 c 文件中都需要它提供的声明,我应该将 .h 文件的包含放在哪里?
  • 我应该把所有 3 个文件中需要的 typedefs 放在哪里?

无论我做什么,似乎 gcc 都会抱怨。

任何人都可以回答这些问题,或者指向我可以阅读的资源吗?

4

2 回答 2

2

如果在两个 c 文件中都需要它提供的声明,我应该将 .h 文件的包含放在哪里?

include语句放入需要标头定义的每个 C 文件中,在您的情况下,在main.c vector.c中。使用包含保护总是一个好主意,如果编译器抱怨符号已经定义或多次定义,则需要使用。

我应该把所有 3 个文件中需要的 typedefs 放在哪里?

这取决于:

  • 如果这些typedefs对于您的矢量 API 是必需的或特定于您的,则将它们放在vector.h中。
  • 如果它们与您的矢量接口无关,即它们特定于main.c,那么它们可能属于那里。
  • 但是您提到所有 3 个文件都需要它们,因此如果它们typedefs 不是矢量接口的一部分,那么它们可能属于第三个头文件,例如common.h 之类的文件,也可能包含在其他所有文件中文件中的项目。
于 2012-07-02T15:23:04.060 回答
2

很自然:

  • 您包括需要它的任何 C 文件的标头。
  • typedefs 是声明,所以它们非常适合放在头文件中。

有时,如果您的标头包含标头,您可能需要防止多重包含,但对于您的情况,这不是必需的。请记住,每个 C 文件都是自行编译的。当然,永远不要#include与 C 文件一起使用。

于 2012-07-02T15:24:06.243 回答