定义一个结构,其中包含一个函数指针,该函数指向一个以结构为参数的函数

时间:2017-03-07 22:13:49

标签: c struct function-pointers

以下结构定义是否安全?

typedef struct s_foo {
  void (*func)(s_foo);
  /* A few other fields */
} foo;

我需要能够将指针存储到表单

的函数中
void function_name(foo f){
    /* Use f.func and other fields. */
}

所以有两件事:使用s_foo代替foo是否可以,只要在函数指针中使用结构就可以了吗?我知道使用指向结构的指针是可以的,但是我从来没有见过这样的东西。 (我简化了发布的代码;我保证在我的应用程序中这是必要的!)

注意:由于foo非常小,我真的希望将其按值传递到function_name。我的function_name函数对性能至关重要,而不必要的指针取消引用将是一件大事。我真的只想把三个论点整合在一起。

1 个答案:

答案 0 :(得分:3)

我相信这段代码原则上很好。只是你在滥用C名称空间。这就是typedefs具有误导性的原因,IMO应该非常谨慎地使用。它极大地混淆了名称空间的理解。

在您的示例中,您已声明了一个函数指针,例如void (*func)(s_foo);。在你的程序中没有s_foo这个函数作为参数,只有struct s_foo这些在不同的命名空间中是不同的东西。

试试这个,没有typedef来混淆应该正常工作的东西。:

struct foo {
  void (*func)(struct foo);
  /* A few other fields */
};

void function_name(struct foo f){
    /* Use f.func and other fields. */
}