我正在阅读有关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;
}
并且,它成功编译。
它是如何运作的?
答案 0 :(得分:4)
typedef将前向声明和typedef组合在一行中。
在C ++中,这可以写成
struct WebRtcVadInst; // forward declare a struct
typedef WebRtcVadInst VadInst; // and introduce an alternate name
任何一种语言都没有问题形成指向未知结构的指针,因为所有指向结构(和C ++中的类)的指针都需要具有相同的大小。
因此,您显示的代码从不使用结构本身(如果它甚至存在),而只使用指针(VadInst*)
。这是正确的语言。