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 함수를 선언해줍니다.