如果想引用别的头文件中定义的结构体,而且又做到发布时不依赖其头文件,就需要在你的头文件中对这个结构体进行前向申明。而前向申明的方式也有一点考究。
1.如果结构体定义如下:
typedef struct tag_test
{
ULONGLONG utime;
ULONGLONG umac;
}test;
你在申明的时候就必须申明为:
typedef struct tag_test test;
2.如果结构体定义如下:
struct test
{
ULONGLONG utime;
ULONGLONG umac;
};
这样申明就可以了:
struct test;
这里要注意的是,前置声明仅仅表示这个结构体类型在别的文件中定义了,.h文件中用到了这个结构体名,但他并不知道这个结构体的具体内容,因为头文件中都是声明,并不需要分配内存,所以并不需要知道结构体的具体内容,
但是如果在对应的.c文件中使用这个前置声明的结构体进行定义时,因为需要分配内存,必须知道该结构体的具体形式,所以,尽管前置声明了该结构体名,但在.c中使用时,仍然需要在.c中将定义有该结构体的头文件包含进来。
这样做的意义是:当两个文件中互相用到对方的结构体定义时,如果在各自的头文件包含,则会引起循环依赖的情况,在头文件中前置声明结构体,然后在.c文件中包含对应头文件,可以避免循环依赖的情况。
参考博客:https://blog.csdn.net/fancycow/article/details/10577043