代码之家  ›  专栏  ›  技术社区  ›  Some Name

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

  •  0
  • Some Name  · 技术社区  · 6 年前

    我正在处理一个头文件,它声明了一些不透明的 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 . 我试过这个:

    十月湾

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

    但它不能编译。所以我现在唯一能看到的就是

    struct test_t{
        library_struct *lib_struct_ptr;
    };
    

    有更短或更方便的方法吗?两个 test 图书馆结构 是不透明的。为什么我不能 测试 与…相同 图书馆结构 ?宏在这里有用吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   bruno    6 年前

    您的代码等价于

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

    所以你重新定义 测试 当然,编译器不接受

    我不知道您希望通过宏执行什么操作,但不允许重新定义。

    在最坏的情况下,您可以使用 void * 然后强制转换为您(希望)拥有的类型,但这显然是危险的,因为编译器将跟踪您 自担风险 .

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