Typedef типа, определенного в отдельном заголовочном файле - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть два заголовочных файла:

src/util/buffer.h * * 1004

//Namespace Src Util Buffer sub

struct sub_buffer{
    size_t size;
    void *buf;
};

//tons of static inline functions

src/lib_context.h

   //Namespace Src Lib Context slc

   typedef struct sub_buffer slc_buffer; // Is this typedef ok?

   struct slc_context{
      //definition
   };

   void slc_set_buffer(slc_buffer *buf_ptr);

   //tons of other structs and functions

В чем я не был уверен, так это typedef struct sub_buffer slc_buffer;. Был выбор включить src/util/buffer.h, но это могло бы привести к жесткому соединению с жаткой, и было бы более трудно заменить его, например, на. другое определение буфера, содержащее член гибкого массива.

Распространено ли вводить такой typedef в структуру, которая определена в другом заголовочном файле, чтобы его реализация была представлена ​​в файле c при включении заголовка (но не для включения одного заголовка в другой заголовочный файл) )

1 Ответ

2 голосов
/ 15 апреля 2019

Нет, это было бы ошибкой.

Возможно, вы имели в виду

typedef struct sub_buffer slc_buffer;

, и в этом случае все нормально, вы всегда можете ввести псевдонимы typedef для типов, даже не определяя эти типыв области действия, в которой вы находитесь.

Вот причина, по которой работает классический самонабирающийся "узел":

typedef struct node node;
struct node {
  node *next;
  void *data;
};

Обратите внимание, как в первой строке a typedef для неизвестноготип используется.

...