在C文件中重新声明不透明结构

时间:2019-01-26 11:37:12

标签: c struct

我正在处理一个头文件,该头文件声明了一些不透明的struct,这些应该在相应的C文件中定义。在这里:

decl.h

#ifndef DECL_H
#define DECL_H

typedef struct test_t test;

#endif //

应该在实现中使用的某些库在其标头lib.h中定义了另一个不透明的结构:

//...
typedef struct _library_struct_t library_struct;
//...

现在在我的decl.c文件中,我想使struct test_tlibrary_struct相同(或兼容)。我尝试过:

decl.c

//...
typedef library_struct test; //error: conflicting types for ‘test’
//...

但是它不能编译。因此,我现在看到的唯一方法是

struct test_t{
    library_struct *lib_struct_ptr;
};

有更短或更方便的方法吗? testlibrary_struct都是不透明的。为什么不能使testlibrary_struct相同?宏在这里有用吗?

1 个答案:

答案 0 :(得分:1)

您的代码等同于

typedef struct test_t test; /* from decl.h */
typedef library_struct test; /* in decl.c */

因此,您重新定义了 test ,当然编译器不接受

我不知道您希望通过宏做什么,但是不允许重新定义。

在最坏的情况下,您可以使用void *隐藏指针的类型,然后将其强制转换为您(希望)具有的类型,但这显然很危险,因为编译器会自行跟随您风险

编译器不会针对您检查类型,而是帮助您在编译时查看错误...