正向声明为你的建议:
/* Forward declare struct A. */
struct A;
/* Typedef for function pointer. */
typedef void (*func_t)(struct A*);
/* Fully define struct A. */
struct A
{
func_t functionPointerTable[10];
};
例如:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct A;
typedef void (*func_t)(struct A*);
struct A
{
func_t functionPointerTable[10];
int value;
};
void print_stdout(struct A* a)
{
printf("stdout: %d\n", a->value);
}
void print_stderr(struct A* a)
{
fprintf(stderr, "stderr: %d\n", a->value);
}
int main()
{
struct A myA = { {print_stdout, print_stderr}, 4 };
myA.functionPointerTable[0](&myA);
myA.functionPointerTable[1](&myA);
return 0;
}
输出:
stdout: 4
stderr: 4
见在线演示http://ideone.com/PX880w。
正如其他人已经提到的,可以添加:
函数指针
typedef
和
struct A
完整定义,如果优选的是省略
struct
关键字
typedef struct A struct_A;
之前。
的语法,这总是把我摔下。 – Claudiu 2013-03-25 22:09:50
“正如其他人已经提到”的确。你可能只是把它放入你的答案,然后我可以删除我的。我认为这会让你的回答更好,而且是最高的。 – 2013-03-25 22:24:56
@DavidHeffernan,谢谢。这个例子是人为设计的,额外的'typedef'的用处并没有被真正传达('struct A'或'struct_A')。 – hmjd 2013-03-25 22:28:32