以下代码生成错误: 在编译时声明和初始化用户结构变量的行上,初始化元素不是常量。
#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 变量来获取指向函数指针的指针的大小,因为我无法以更简洁的方式执行此操作。我怎样才能解决这个问题 ?