소스 파일
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 3번째.
지금까지 함수 선언은 헤더 파일에 배치했지만, 실제 함수 코드(정의)는 메인 파일에 있었습니다. 모듈식 프로그래밍의 다음 단계는 이러한 정의를 별도의 소스 파일(.c 파일)로 옮기는 것입니다.
이렇게 하면 깔끔한 3부분 구조가 만들어집니다. 헤더는 함수를 선언하고, 별도의 소스 파일은 함수를 정의하며, main은 이를 사용하기만 합니다. 다음과 같습니다.
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
// math_utils.c
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"
int main() {
printf("%d\n", add(5, 3));
return 0;
}
math_utils.c에 자체 헤더가 포함되어 있다는 점에 주목하세요. 이렇게 하면 함수 정의가 선언과 일치하는지 확인할 수 있으며, 일치하지 않으면 컴파일러가 오류를 잡아냅니다. 메인 파일에서는 함수를 사용하기 위해 헤더만 포함하면 됩니다. add가 내부적으로 어떻게 작동하는지는 알 필요가 없습니다.
이러한 분리는 구현 세부 정보를 숨기고, 해당 함수들을 사용하는 파일을 수정하지 않고도 함수 로직을 변경할 수 있게 해줍니다.
챌린지
쉬움코드를 선언을 위한 헤더 파일, 구현을 위한 소스 파일, 그리고 이를 사용하는 메인 파일로 구성된 적절한 세 파일 구조로 정리해 간단한 수학 유틸리티를 만들어 봅시다.
파일 세 개를 만듭니다.
math_ops.h: 두 연산multiply와subtract의 함수 선언을 포함하는 헤더 파일입니다. 두 함수 모두 정수 두 개를 받아 정수를 반환합니다.MATH_OPS_H기호를 사용한 인클루드 가드도 잊지 마세요.math_ops.c:multiply와subtract의 실제 구현을 포함하는 소스 파일입니다. 선언과 정의가 일치하도록 이 파일에서 자체 헤더를 포함해야 합니다.main.c: 헤더를 포함하고 두 함수를 모두 사용해 계산을 수행하는 메인 파일입니다.
multiply 함수는 두 정수의 곱을 반환해야 하고, subtract 함수는 첫 번째 정수에서 두 번째 정수를 뺀 값을 반환해야 합니다.
정수 입력 두 개 a와 b를 받습니다.
메인 함수에서 두 연산의 결과를 각각 별도의 줄에 출력하세요.
Product: {result of multiply}
Difference: {result of subtract}예를 들어 입력이 8과 3이면 출력은 다음과 같습니다.
Product: 24
Difference: 5직접 해보기
#include <stdio.h>
#include "math_ops.h"
int main() {
int a, b;
scanf("%d", &a);
scanf("%d", &b);
// TODO: a와 b를 인수로 multiply 함수를 호출하고 결과를 저장하세요
// TODO: a와 b를 인수로 subtract 함수를 호출하고 결과를 저장하세요
// TODO: 다음 형식으로 결과를 출력하세요:
// Product: {multiply의 결과}
// Difference: {subtract의 결과}
return 0;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러