Переопределение непрозрачной структуры в C-файле - PullRequest
0 голосов
/ 26 января 2019

Я работаю над заголовочным файлом, который объявляет некоторые непрозрачные struct s, которые должны быть определены в соответствующем 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?Здесь могут быть полезны макросы?

1 Ответ

0 голосов
/ 26 января 2019

ваш код эквивалентен

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

Итак, вы переопределяете test и, конечно, компилятор не принимает это

Я не знаю, что выожидайте выполнения с помощью макросов, но переопределение не допускается.

В худшем случае вы можете скрыть тип указателя с void *, а затем привести к типу, который есть у вас (надеюсь), но это очевидно опаснопотому что компилятор будет следовать за вами на свой страх и риск .

Компилятор не проверяет типы против вас, а помогает вам увидеть ваши ошибки во время компиляции ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...