C:使用带有函数指针的二维数组

时间:2011-11-22 12:30:21

标签: c arrays function-pointers

我需要使用一些带有附加布尔标志的函数指针。 我尝试过以下内容,但不会编译。 有人可以帮忙吗?

int handler1(int mix) {
    ...
    return 0;
}
int handler2(int mix) {
    ...
    return 0;
}
int handler3(int mix) {
    ...
    return 0;
}

typedef int (*my_handler)(int mix);

typedef struct {
    my_handler handler,
    bool mix_handler,
} handle_pair;

static handler_pair handlers[] = {
    { handler1, FALSE },
    { handler2, TRUE },
    { handler3, FALSE },
    { NULL, FALSE },
};

3 个答案:

答案 0 :(得分:1)

我的猜测是这些线条会给你一个问题:

typedef struct {
    my_handler handler,
    bool mix_handler,
} handle_pair;

您应该使用;结束声明,即使在结构中也是如此。像这样:

typedef struct {
    my_handler handler;
    bool mix_handler;
} handle_pair;

此外,您键入名称handle_pair但声明类型为handler_pair的数组。 “处理”或“处理程序”?

答案 1 :(得分:1)

你的struct typedef是错误的,你用分号分隔声明,而不是像普通代码那样用结构声明中的逗号分隔。

应该是:

typedef struct {
    my_handler handler;
    bool mix_handler;
} handle_pair;

如果我注释掉......行,并将以下内容粘贴在文件的头部:

#include <stdbool.h>
#include <unistd.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

并在静态声明中将handler_pair更改为handle_pair,它会编译。

答案 2 :(得分:0)

试试这个:

#include <cstdio>

int handler1(int mix) {
    //...
    return 0;
}
int handler2(int mix) {
    //...
    return 0;
}
int handler3(int mix) {
    //...
    return 0;
}

typedef int (*my_handler)(int mix);

typedef struct {
    my_handler handler;
    bool mix_handler;
} handle_pair;

static handle_pair handlers[] = {
    { handler1, false },
    { handler2, true },
    { handler3, false },
    { NULL, false },
};

下次显示错误并指定编译器,操作系统等。这是使用VisualC ++ 9测试的