我可以在C结构中定义一个函数吗?

时间:2012-09-28 15:20:23

标签: c function structure

我正在尝试将一些C ++代码转换为C并且我遇到了一些问题。 如何在结构内部定义函数?

像这样:

 typedef struct  {
    double x, y, z;
    struct Point *next;
    struct Point *prev;
    void act() {sth. to do here};
} Point;

6 个答案:

答案 0 :(得分:50)

不,您无法在C中的struct内定义函数。

你可以在struct中有一个函数指针但是函数指针与C ++中的成员函数非常不同,即没有指向包含this的隐式struct指针实例。

Contrived example(在线演示http://ideone.com/kyHlQ):

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct point
{
    int x;
    int y;
    void (*print)(const struct point*);
};

void print_x(const struct point* p)
{
    printf("x=%d\n", p->x);
}

void print_y(const struct point* p)
{
    printf("y=%d\n", p->y);
}

int main(void)
{
    struct point p1 = { 2, 4, print_x };
    struct point p2 = { 7, 1, print_y };

    p1.print(&p1);
    p2.print(&p2);

    return 0;
}

答案 1 :(得分:14)

您可以在结构中使用函数指针。但不是这样

你可以用这种方式定义

示例:

typedef struct cont_func 
{
    int var1;
    int (*func)(int x, int y);
    void *input;
} cont_func;


int max (int x, int y)
{
    return (x > y) ? x : y;
}

int main () {
   struct cont_func T;

   T.func = max;
}

答案 2 :(得分:7)

不,不可能在C中的结构内声明一个函数。

这是(C之一)C和C ++之间的根本区别。

请参阅此主题:http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html

答案 3 :(得分:7)

C中,不允许在struct内定义方法。您可以在结构中定义函数指针,如下所示:

typedef struct  {
  double x, y, z;
  struct Point *next;
  struct Point *prev;
  void (*act)();
} Point;

每当您实例化struct时,都必须将指针指定给特定的函数。

答案 4 :(得分:2)

这个想法是在结构中放置一个指向函数的指针。然后在结构外部声明该函数。这与C ++中的类不同,其中函数在类中声明。

例如:从此处窃取代码:http://forums.devshed.com/c-programming-42/declaring-function-in-structure-in-c-545529.html

struct t {
    int a;
    void (*fun) (int * a);
} ;

void get_a (int * a) {
    printf (" input : ");
    scanf ("%d", a);
}

int main () {
    struct t test;
    test.a = 0;

    printf ("a (before): %d\n", test.a);
    test.fun = get_a;
    test.fun(&test.a);
    printf ("a (after ): %d\n", test.a);

    return 0;
}

其中test.fun = get_a;将函数分配给结构中的指针,test.fun(&test.a);调用它。

答案 5 :(得分:1)

您只能使用C编程语言在结构中定义一个与C ++不同的函数指针。