在函数符号中使用 void 指针

  • 本文关键字:void 指针 函数 符号 c
  • 更新时间 :
  • 英文 :


我最近继承了一些(未记录的(C代码,其中包含此模式的多个实例:

void my_function(void *_foo, const void *_bar) {
    MyType *foo = (MyType *)_foo;
    MyType *bar = (MyType *)_bar;

我对 C 非常熟悉,但我一生都无法弄清楚为什么该函数会消耗空指针。如果错误类型在任何地方传递,这不就是为了抑制可能有用的编译器警告吗?还是我刚开始的背后有合理的方法?

通常,void *用作抽象,即您可以使用void *将不同类型的指针传递给函数,稍后根据适当的条件,您可以将void *类型转换为正确的类型并使用它。

另一种用法可能是当调用函数位于逻辑上独立的单元(如库(中,并且无法访问指针所属的正确类型时。但是,数据仍然必须通过该函数。

我曾经将这种抽象机制与回调一起使用。例如,如果我正在调用一个函数库,该函数最终调用我的回调,并且我希望在我的回调中有一些应用程序数据,但是,库函数没有使用它,那么我将void *将此类数据类型传递给库函数并在回调中接收该数据时, 我会将其类型转换为适当的类型并使用它。

最新更新