我正在处理一个头文件,该头文件声明了一些不透明的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_t
与library_struct
相同(或兼容)。我尝试过:
decl.c
//...
typedef library_struct test; //error: conflicting types for ‘test’
//...
但是它不能编译。因此,我现在看到的唯一方法是
struct test_t{
library_struct *lib_struct_ptr;
};
有更短或更方便的方法吗? test
和library_struct
都是不透明的。为什么不能使test
与library_struct
相同?宏在这里有用吗?
答案 0 :(得分:1)
您的代码等同于
typedef struct test_t test; /* from decl.h */
typedef library_struct test; /* in decl.c */
因此,您重新定义了 test ,当然编译器不接受
我不知道您希望通过宏做什么,但是不允许重新定义。
在最坏的情况下,您可以使用void *
隐藏指针的类型,然后将其强制转换为您(希望)具有的类型,但这显然很危险,因为编译器会自行跟随您风险。
编译器不会针对您检查类型,而是帮助您在编译时查看错误...