[완료] 개발중 질문있습니다

sacredone의 이미지

typedef struct Stack{
    char stack[STACK_SIZE];
    int top;
}Stack;
 
void push(Stack* s, char c)
{
    if(s->top == 100){
        printf("stack is full\n");
        exit(1);
    }
    s->top++;
    s->stack[s->top] = c;
}

이러한 스택 구조체와 푸시 함수를 구현했는데

구현할때는 char 형에 대한 처리만 하면됬어서 저렇게 만들었다가

완전히 동일한 기능을 하지만 double 형인 기능이 필요합니다

그렇다고

typedef struct Stack_d{
    double stack[STACK_SIZE];
    int top;
}Stack_d;
 
void push(Stack* s, double d)
{
    if(s->top == 100){
        printf("stack is full\n");
        exit(1);
    }
    s->top++;
    s->stack[s->top] = d;
}

이렇게 또 선언하기는 싫고말이죠 ㅠ

어떻게 방법이 없을까요

snowall의 이미지

C++이면 템플릿을 쓰면 될 것 같고 그냥 C라면... push의 선언이 겹쳐서 저대로 쓰면 안되겠죠.

c나 d를 void로 쓰고 넣을때랑 꺼낼때 캐스팅하는 방법이 생각나네요. 맞는지는 모르겠습니다..

피할 수 있을때 즐겨라! http://melotopia.net/b

gramo의 이미지


union StackType {
char ch;
double db;
};

typedef struct Stack {
StackType stack[STACK_SIZE];
int top;
}Stack;

void push(Stack* s, StackType t)
{
if(s->top == 100){
printf("stack is full\n");
exit(1);
}
s->top++;
s->stack[s->top] = t;
}

char쓸때는 t.ch를 사용. double일때는 t.db를 사용하면 됩니다.

C++로 한다면 템플릿으로 간단하게..

sacredone의 이미지

답변해주신 모든분 감사합니다