我正在开发一个项目,我不得不使用一些以前编写的代码,该代码使用许多头文件调用其他头文件。我试图将我的应用程序分开,但我仍然需要使用前面代码中定义的许多类型和函数。
在引用其他头文件中声明的数据类型时,我在自己的头文件中添加了前向声明。我现在的问题是,我正在尝试从源文件中的函数定义中引用联合类型,我不太清楚如何去做。
旧标题文件:
/* 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的未知大小。
提前感谢您的帮助。
答案 0 :(得分:3)
#include
指令不是要避免的。如果您担心其他人的代码会污染您的代码,您可以制作一个包含所需标题的标题,并直接包含该标题。
复制代码很糟糕。
答案 1 :(得分:3)
如果您需要创建该类型的实际实例,则需要完整的声明,而不仅仅是名称。
在这种情况下,正确的做法是咬住子弹并包含定义类型的头文件。
答案 2 :(得分:1)
其他代码可能包含一堆其他标题,因为它需要它们!你应该只包括另一个标题,否则你会复制错误的代码。