あなたが提案するように前方宣言:
/* 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_A;
関数ポインタの前と、キーワードを省略することが望ましいかどうかtypedef
の完全な定義。struct A
struct