具有未声明/未定义类型的typedef结构

时间:2017-08-20 12:01:44

标签: c++ c webrtc

我正在阅读有关VAD的webrtc源代码,我对代码感到困惑

typedef struct WebRtcVadInst VadInst;

我搜索了所有关于 WebRtcVadInst 的代码,但未找到任何与struct WebRtcVadInst相关的源代码。另一方面,我确实找到了关于 VadInst 的信息。

typedef struct VadInstT_ {
    int vad;
    int32_t downsampling_filter_states[4];
    ...
    ...
    int init_flag;
} VadInstT;

VadInst* WebRtcVad_Create() {
  VadInstT* self = (VadInstT*)malloc(sizeof(VadInstT));

  WebRtcSpl_Init();
  self->init_flag = 0;

  return (VadInst*)self;
}

并且,它成功编译。

它是如何运作的?

1 个答案:

答案 0 :(得分:4)

typedef将前向声明和typedef组合在一行中。

在C ++中,这可以写成

struct WebRtcVadInst;            // forward declare a struct

typedef WebRtcVadInst VadInst;   // and introduce an alternate name

任何一种语言都没有问题形成指向未知结构的指针,因为所有指向结构(和C ++中的类)的指针都需要具有相同的大小。

因此,您显示的代码从不使用结构本身(如果它甚至存在),而只使用指针(VadInst*)。这是正确的语言。