77.7 연습문제: 헤더 파일 작성하기

다음 소스 코드를 완성하여 2 * 3 = 6이 출력되게 만드세요.

calcdata.h

_______________________
_______________________

typedef struct _CALC_DATA {
    int operand1;     // 계산할 값1
    int operand2;     // 계산할 값2
    char operator;    // 연산자 문자
    int result;       // 계산 결과
} CALC_DATA;

_______________________

calc.h

_______________________

void mul(CALC_DATA *data);

print.h

#include "calcdata.h"

_______________________

calc.c

#include "calc.h"

void mul(CALC_DATA *data)
{
    data->operator = '*';

    data->result = data->operand1 * data->operand2;
}

print.c

#include <stdio.h>
#include "print.h"

void print(CALC_DATA *data)
{
    printf("%d %c %d = %d\n",
        data->operand1,
        data->operator,
        data->operand2,
        data->result
    );
}

main.c

#include "calc.h"
#include "print.h"

int main()
{
    CALC_DATA data;
    data.operand1 = 2;
    data.operand2 = 3;

    mul(&data);
    print(&data);

    return 0;
}

실행 결과

2 * 3 = 6

정답


calcdata.h

#ifndef CALC_DATA_H
#define CALC_DATA_H

#endif 

calc.h

#include "calcdata.h"

print.h

void print(CALC_DATA *data);

해설

여러 헤더 파일과 소스 파일을 사용해서 프로그램이 컴파일되도록 만들어야 합니다.먼저 calcdata.h 파일은 구조체가 정의되어 있으며 여러 파일에서 포함하고 있습니다. 따라서 이 상태로 컴파일하면 컴파일 에러가 발생하므로 조건부 컴파일을 사용하여 한 번만 컴파일되도록 만듭니다.

calc.h 헤더 파일은 mul 함수에서 CALC_DATA 구조체를 사용하고 있으므로 calcdata.h 헤더 파일을 포함해줍니다.

마지막으로 main 함수에서 print 함수를 사용하고 있는데 print 함수의 반환값과 매개변수 자료형을 알아야 합니다. 따라서 print.h 헤더 파일에 print 함수를 선언해줍니다.