正向聲明爲你的建議:
/* 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