gpt4 book ai didi

c - 定义一个包含函数指针的结构,该函数指针指向以该结构作为参数的函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:12 24 4
gpt4 key购买 nike

下面的结构体定义安全吗?

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 函数对性能至关重要,不必要的指针取消引用将是一个大问题。我真的只是想把三个参数打包成一个。

最佳答案

我相信这段代码原则上没问题。只是你滥用了 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. */
}

关于c - 定义一个包含函数指针的结构,该函数指针指向以该结构作为参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42659376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com