C에서 구조물의 정적 배열 초기화
저는 C에서 카드 게임을 구현하고 있습니다.카드에는 여러 가지 유형이 있으며 각 카드에는 개별적으로 관련된 스크립트를 작성해야 하는 몇 가지 작업을 포함한 여러 가지 정보가 있습니다.
이와 같은 구조가 주어졌을 때 (그리고 함수 포인터에 대한 구문 권한을 가지고 있는지 잘 모르겠습니다)
struct CARD {
int value;
int cost;
// This is a pointer to a function that carries out actions unique
// to this card
int (*do_actions) (struct GAME_STATE *state, int choice1, int choice2);
};
이것들의 정적 배열을 카드마다 하나씩 초기화하고 싶습니다.이런 모습일 것 같은데요
int do_card0(struct GAME_STATE *state, int choice1, int choice2)
{
// Operate on state here
}
int do_card1(struct GAME_STATE *state, int choice1, int choice2)
{
// Operate on state here
}
extern static struct cardDefinitions[] = {
{0, 1, do_card0},
{1, 3, do_card1}
};
이게 효과가 있을까요? 그리고 제가 이 일을 제대로 하고 있는 건가요?엄청난 수의 스위치 진술을 피하려고 합니다.
do_cardN' 함수를 미리 정의해야 하나요, 아니면 구조의 초기화에서 인라인으로 정의할 수 있는 방법이 있나요? (python의 람다 함수와 같은)
다른 파일에서 cardDefinitions에 대한 읽기 전용 액세스가 필요합니다. 이 경우 '외부 정적'이 맞는가요?
이것은 많은 질문들이 하나로 합쳐진 것을 알지만 나는 이것에 대해 어떻게 해야 할지 정말로 애매합니다.
감사해요.
편집:
분명히 말씀드리면, 제 목표는 다음과 같은 일을 할 수 있는 것입니다.
int cost = cardDefinitions[cardNumber].cost;
아니면
int result = cardDefinitions[cardNumber].do_action(state, choice1, choice2);
거대한 스위치 문장을 여기저기에 사용하는 대신.
당신의 접근 방식이 정확합니다.
- 이것은 효과가 있을 것이고, 큰 것을 피할 수 있는 좋은 방법입니다.
switch
진술들. - C에서 일렬로 함수를 정의할 수는 없고, 각각의 함수는 고유한 이름을 가져야 합니다.
extern
당신이 원하는 것이지, 아닌.static
. 몸을 다음과 같이 바꿉니다.struct CARD cardDefinitions[] = { {0, 1, do_card0}, {1, 3, do_card1} };
적절한 헤더 파일에 다음을 입력합니다.
extern struct CARD cardDefinitions[];
당신의 접근 방식은 옳으며 효과가 있을 것입니다.매개 변수 이름을 사용하지 않고 형식만 사용하는 것을 제외하고는 함수 포인터 구문이 맞습니다.
int (*do_actions)(struct GAME_STATE *, int, int);
잘 될 겁니다.카드 한 장당 하나씩 한다면 많은 기능이 있을 것 같지만, 어쩌면 이 특정 게임은 그 정도 수준의 제어가 필요할지도 모릅니다.
인라인으로 정의할 수는 없고 전달 선언만 하면 됩니다.할 필요가 있습니다.
&func_name
구조 초기화에 있어서는아니요;
extern
즉, 변수가 다른 파일에 선언되어 있으므로 해당 위치에서 선언하는 외부 변수를 갖는 것은 의미가 없습니다.또한.static
현재 파일에서만 변수에 액세스할 수 있음을 의미하며, 이는 원하는 것과 반대입니다.읽기 전용으로 만들려면 getter 기능이 필요하지만, 다른 파일에서 액세스할 수 있도록 하려면 여기서 일반적으로 선언합니다(struct cardDefinitions[] = {...}
및 ()을합니다.extern struct cardDefinitions[];
)
언급URL : https://stackoverflow.com/questions/2641473/initialize-static-array-of-structs-in-c
'programing' 카테고리의 다른 글
Objective-C 클래스에서 Swift 프로토콜 가져오기 (0) | 2023.10.04 |
---|---|
AngularJS Reference Error: $window가 정의되지 않았습니다. (0) | 2023.10.04 |
입력 루프에 주조 입력 (0) | 2023.10.04 |
WP-CLI에서 WordPress 게시물에 태그/카테고리 추가 (0) | 2023.10.04 |
봄 + 동면 대 봄 데이터 JPA: 서로 다릅니까? (0) | 2023.10.04 |