C在函数定义中使用前向声明

时间:2013-12-02 23:28:24

标签: c forward-declaration

我正在开发一个项目,我不得不使用一些以前编写的代码,该代码使用许多头文件调用其他头文件。我试图将我的应用程序分开,但我仍然需要使用前面代码中定义的许多类型和函数。

在引用其他头文件中声明的数据类型时,我在自己的头文件中添加了前向声明。我现在的问题是,我正在尝试从源文件中的函数定义中引用联合类型,我不太清楚如何去做。

旧标题文件:

/* filename: include.h */

typedef union SOME_UNION_TYPE
{
  int a;
  .
  .
}SOME_UNION_TYPE;


我的源文件:

/* filename: file.c */

void func()
{
  SOME_UNION_TYPE A;
  .
  .
  return;
}


我知道在我的源代码中包含“include.h”会更容易,但我尽量避免使用它。到目前为止,我的尝试一直是在我的头文件中声明union,希望将typedef名称暴露给编译器。

我的头文件:

/* filename: file.h */

union SOME_UNION_TYPE;


但是,当我编译时,我收到一个错误,抱怨func()中A的未知大小。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

#include指令不是要避免的。如果您担心其他人的代码会污染您的代码,您可以制作一个包含所需标题的标题,并直接包含该标题。

复制代码很糟糕。

答案 1 :(得分:3)

如果您需要创建该类型的实际实例,则需要完整的声明,而不仅仅是名称。

在这种情况下,正确的做法是咬住子弹并包含定义类型的头文件。

答案 2 :(得分:1)

其他代码可能包含一堆其他标题,因为它需要它们!你应该只包括另一个标题,否则你会复制错误的代码。