我正在阅读有关VAD的webrtc源代码,我对代码感到困惑
typedef struct WebRtcVadInst VadInst;
Run Code Online (Sandbox Code Playgroud)
我搜索了所有关于WebRtcVadInst的代码,没有找到任何与struct WebRtcVadInst相关的来源。另一方面,我确实找到了一些关于VadInst 的信息。
typedef struct VadInstT_ {
int vad;
int32_t downsampling_filter_states[4];
...
...
int init_flag;
} VadInstT;
Run Code Online (Sandbox Code Playgroud)
和
VadInst* WebRtcVad_Create() {
VadInstT* self = (VadInstT*)malloc(sizeof(VadInstT));
WebRtcSpl_Init();
self->init_flag = 0;
return (VadInst*)self;
}
Run Code Online (Sandbox Code Playgroud)
并且,它编译成功。
它是如何工作的?
typedef 将前向声明和 typedef 组合在一行中。
在 C++ 中可以这样写
struct WebRtcVadInst; // forward declare a struct
typedef WebRtcVadInst VadInst; // and introduce an alternate name
Run Code Online (Sandbox Code Playgroud)
在这两种语言中形成指向未知结构的指针都没有问题,因为所有指向结构(以及 C++ 中的类)的指针都需要具有相同的大小。
因此,您显示的代码从不使用结构本身(如果它存在),而只使用指针(VadInst*)。从语言角度来说这没问题。
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |