C函数在不使用相同对象的情况下在struct内部调用

C函数在不使用相同对象的情况下在struct内部调用,c,function-calls,C,Function Calls,例如,我有下面的C代码: #include <stdio.h> #include <stdlib.h> struct a { void(*fun)(struct a *); int x; }; void fun(struct a *st) { ++st->x; } struct a *new_a() { struct a *v = (struct a*)malloc(sizeof(struct a)); v->fun

例如,我有下面的C代码:

#include <stdio.h>
#include <stdlib.h>
struct a
{
    void(*fun)(struct a *);
    int x;
};

void fun(struct a *st)
{
    ++st->x;
}

struct a *new_a()
{
    struct a *v = (struct a*)malloc(sizeof(struct a));
    v->fun = fun;
    return v;
};

int main()
{
    struct a *v = new_a();
    v->x = 5;
    v->fun(v);
    printf("%d\n", v->x);
}
#包括
#包括
结构a
{
无效(*fun)(结构a*);
int x;
};
虚无乐趣(结构a*st)
{
++st->x;
}
结构a*新的_a()
{
结构a*v=(结构a*)malloc(sizeof(结构a));
v->乐趣=乐趣;
返回v;
};
int main()
{
结构a*v=new_a();
v->x=5;
v->fun(v);
printf(“%d\n”,v->x);
}

当然,这会打印出
6
,但是,有没有一种方法不使函数调用依赖于使用相同的结构来调用它:
v->fun(),而不是
v->fun(v)

简短的回答是否。你需要C++。

简短的答案是<强>不<强>。您需要C++。

<强> NO.<强>,C没有简单的方法来实现这一点。C++提供了这个特性,称之为方法。如果您打算用类实现自己的C语言,那么在放弃之前,您将遇到语法噩梦


一个好的C风格的对象函数方法是函数将一个(主要是第一个)参数作为“self”(这是对被管理对象的引用)的约定。

否。在C中,没有简单的方法可以做到这一点。C++提供了这个特性,称之为方法。如果您打算用类实现自己的C语言,那么在放弃之前,您将遇到语法噩梦


一个好的C风格的对象函数方法是函数将一个(主要是第一个)参数作为“self”(这是对被管理对象的引用)的约定。

好吧,。。。对在
结构之外定义它。至少它会节省你两次引用你的“对象”和存储函数指针,这几乎没有任何理由,或者——就像上面提到的——使用C++。你不能在代码< >结构< < />代码中添加<代码>结构*Auto/<代码>吗?对在
结构之外定义它。至少它可以节省你两次引用你的“对象”,并且存储函数指针,几乎没有任何理由,或者——就像上面提到的——使用C++。你不能在代码< >结构> < /COD>中添加<代码>结构*A*自我/代码>吗?