[C언어] 파일 분리(분할)하기
본문 바로가기
C++/C Basic

[C언어] 파일 분리(분할)하기

by Macgyvering2 2020. 10. 12.

들어가며

프로그래밍 할 때 main 함수에 모든 코드를 넣어서 코딩하면 소스 코드가 길어져서 보기 힘들어진다.

이를 위해서 함수로 만들어서 재사용성을 높이고 간결하게 관리하는데,

이 마저도 함수가 많아지면 파일이 길어지고 관리하기 힘들어진다.

그래서 파일을 분리하여 보지 않아도 되는 부분을 함수로 만들어 보관하여 투명성과 직관성과 간결성을 높인다. 

 

원래 이런 파일이 있었다고 가정하자. 

#include <stdio.h>

void foo();

int main(void)
{
	foo();
	return 0;
}

void foo() 
{
	printf("Hello world!\n");
}

동작은 아주 간단하게 작성하였다. 

콘솔에 Hellow world!(줄바꿈)를 출력하는 프로그램인데 printf문만 따로 함수로 빼서 작성하였다. 

 

void foo(); 부분은 함수를 선언하는 부분이고,

실제 함수 구현 부분은 아래의 void foo(){} 부분이다.

 

이를 파일을 분리하여 작성하면 다음의 3가지 파일로 분리할 수 있다.

main.c

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

int main(void)
{
	foo();
	return 0;
}

여기서의 포인트는 foo() 함수를 사용하기 위해서는 "header.h"를 추가해줘야 한다는 것이다.

보지 않아도 되는 부분을 분리함으로써 main 함수가 매우 간결해졌다.

header.h

#ifndef _HEADER_H_
#define _HEADER_H_
#include <stdio.h>

void foo();

#endif

여기서의 포인트는 두가지다. 전처리기 문장이 들어갔다는 것과 사용하고자 하는 헤더를 선언해줘야 한다는 부분이다.

 

전처기리 문장에 대해 해설하자면

1) #ifndef는 if not defined의 의미다.

"_HEADER_H_가 선언되지 않았다면 다음을 수행하라"는 의미를 갖고 있다. 

 

2) 그 다음 #define문장은 _HEADER_H_를 선언하는 부분이므로

이 부분을 실행하고 난 뒤 다른 파일에서 이중으로 선언되는 것을 막는 것이다.

 

3) #endif는 #ifndef가 영향을 미치는 구간이 여기까지라는 뜻이다.

자세한 것은 #if 전처리기를 보라.

 

그리고 <stdio.h>를 선언해줬는데, 이 파일에서 사용할 헤더를 선언해줘야 한다는 점이 중요하다.

마지막으로 헤더 파일에서 본문에 작성할 것은 void foo(); 처럼 선언에 해당하는 부분만 작성해줘야 한다는 것이다.

header.c

#include "header.h"

void foo() {
	printf("Hello world!\n");
}

이 부분에서의 포인트는 일단 한번 header.h를 포함시켜줘야 한다는 것이다.

그리고 이 파일에서는 함수의 실제 구현 부분만 다루면 된다.

댓글