次のコードではエラーが生成さ れます。ユーザー構造体変数を宣言および初期化する行で、コンパイル時に初期化子要素が定数ではありません。
#include <stdio.h>
#include <stdlib.h>
struct user_s {
char *name;
void (*(*pred_skip_func))(int);
};
void f1 (int skip) {
printf("I am f1\n");
}
void f2 (int skip) {
printf("I am f2\n");
}
void (*(*pred_skip_func))(int);
struct user_s user = {"Manu", pred_skip_func};
int main(void) {
struct user_s tmp;
pred_skip_func = malloc(sizeof(tmp.pred_skip_func) * 2);
pred_skip_func[0] = f1;
pred_skip_func[1] = f2;
int i;
for (i = 0; i < 2; i++) {
(*(user.pred_skip_func)[i]) (i);
}
return EXIT_SUCCESS;
}
メイン関数で初期化を移動すると問題は解決しますが、その理由を理解したいですか? 構造体の初期化に制限はありますか?
さらに、ご覧のとおり、関数ポインターへのポインターのサイズを取得するために tmp user_struc 変数を作成しました。どうすればこれを修正できますか?