다음 코드는 오류를 생성합니다. 사용자 구조체 변수를 선언하고 초기화하는 줄에서 이니셜 라이저 요소가 컴파일시에 이 상수가 아닙니다.sizeof 연산자를 함수 포인터에 적용하고 구조체를 초기화하는 방법은 무엇입니까?
#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;
}
주 기능의 초기화를 이동하면 문제가 해결되지만 그 이유를 알고 싶습니다. 구조 초기화에 대한 제한이 있습니까?
더 자세히 살펴보면 tem user_struc 변수를 만들어 내 포인터를 함수 포인터로 가져올 수 있기 때문에 더 깨끗한 방식으로이 작업을 수행 할 수 없었습니다. 이 문제를 어떻게 해결할 수 있습니까?
이 예제에서 struct 사용자는 정적 저장소가 있습니까? 나를 위해. 그래서 나는 명확하게 이해하지 못합니다. –
@ManuelSelva : 파일 범위에서 선언 된 변수에는 * 정적 저장 기간 *이 있습니다. – Jon
확인. 따라서 전역 변수를 정적 변수로 선언해도 "저장 기간"에는 영향을 미치지 않지만 어떻게 호출할까요? –