파일 분할 컴파일


파일 분할 컴파일


이번에는 헤더파일과 소스파일 여러개를 가지고 파일 분할 컴파일을 해보겠다.

human.c  |  str.c  |  Study.c  |  Human.h  | str.h

파일을 준비하자.


일단 헤더파일 안에는

 전역 변수

구조체, 공용체, 열거형 

함수의 원형 

일부 특정한 함수 (인라인 함수) 

매크로 

이렇게 넣는것을 추천한다. C코드를 집어넣도 되긴 하는데 별로 권장하고 싶지는 않다.


<human.h>

1
2
3
4
5
6
7
8
9
10
enum {MALE, FEMALE};
struct Human
{
    char name[20];
    int age;
    int gender;
};
 
struct Human Create_Human(char *name, int age, int gender);
int Print_Human(struct Human *human);
cs

human 헤더파일 안에는 열거형, 구조체, 함수의 원형들이 들어가 있다.

<human.c>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "Human.h"
#include "str.h"
#include <stdio.h>
struct Human Create_Human(char *name, int age, int gender)
{
    struct Human human;
    human.age = age;
    human.gender = gender;
    copy_str(human.name, name);
    return human;
}
int Print_Human(struct Human *human)
{
    printf("Name : %s\n", human->name);
    printf("Age : %d\n", human->age);
    if (human->gender == MALE)
        printf("Gender : Male\n");
    else if (human->gender == FEMALE)
        printf("Gender : Famale\n");
    return 0;
}
cs

human c 파일에는 구조체의 예 대한 정보와 함수 원형들이 있는 Human.h 파일을 include 해주고
printf 활용을 위해 stdio.h 파일도 include 해준다. 그리고 str.h는 문자열 복사 함수 원형이 담겨 있다.
나는 이렇게 정리했다. human.c 파일은 실행 부여고 실행하기 위해서 Human.h 파일에 필요한 것들이 담겨 있는 것이라고 정리를 했다.

<str.h>
1
char copy_str(char *dest, char *src);
cs

<str.c>
1
2
3
4
5
6
7
8
9
10
#include "str.h"
char copy_str(char *dest, char *src)
{
    while (*src) {
        *dest = *src;
        src++, dest++;
    }
    *dest = '\0';
    return 1;
}
cs

함수의 실행부가 들어있다.

<Study.c> main 실행부
1
2
3
4
5
6
7
#include "Human.h"
#include <stdio.h>
main()
{
    struct Human Lee = Create_Human("Lee"40, MALE);
    Print_Human(&Lee);
}
cs

< 출력 >
Name : Lee
Age : 40
Gender : Male

이렇게 실행이 된다. 다시 한번 설명하자면, 헤더 파일에는

 전역 변수

구조체, 공용체, 열거형 

함수의 원형 

일부 특정한 함수 (인라인 함수) 

매크로 

이렇게 들어가는 게 좋고 소스파일에는 헤더 파일의 실행 부가 들어간다.
이렇게 정리하면 될 거 같다.

앞으로 이렇게 버릇을 길들여야겠다. 뭐든지 이런 식으로 파일을 나눠서 코딩을 해보도록 해야겠다.

댓글

Designed by JB FACTORY