본문 바로가기
코딩/C 언어

C언어 기초 - 헤더파일 만드는 방법과 사용하는 방법

by DIYver 2020. 7. 8.

본문 목표

프로젝트가 복잡하고 규모가 클 수록, 코드가 많이 길어지게 된다.

 

코드가 길어지면 가독성이 떨어지게 된다.

 

가독성이 떨어지면, 코드 개발이 복잡해지고, 오류가 발생할 확률이 높고,

오류를 잡기 힘들어진다.

 

따라서 가독성을 높이기 위해서는 여러개의 소스파일을 사용한다.

 

여러개 소스파일을 만들고, 사용하는 방법을 헤더파일을 통해 알아보자.

 

 

 

 

 

 

 

개념 정리

학창시절 공부를 한다고 했을 때, 단원별로 공부를 하고, 개념노트를 만들곤 했을 것이다.

 

프로그래밍도 마찬가지로, 계속 개발할 수록 비슷한 것들 끼리 묶어서 저장하는 것이 좋다.

 

나중에 찾아보기도 쉽고 이해하기도 쉽기 때문이다.

 

노트 하나에 수학, 물리, 화학을 한꺼번에 정리하면 완전 뒤죽박죽이 되어서 알 수 없듯이

 

프로그래밍도 소스파일 하나에 개발을 다 해버렸다면 코드들이 뒤섞여서 나중에 보면 알 수가 없다.

 

 

이렇게 가독성을 높여주는 방법이 바로 헤더파일을 만들고,

 

해당 헤더파일에 해당하는 소스파일을 만들어 주는 것이다.

 

그리고 그 소스파일에는 사용자가 만든 사용자 정의 함수를 정의해놓는다.

 

 

 

헤더파일은 메뉴판과 같다고 할 수 있다.

 

돈까스 집의 메뉴판에는 양식과 관련된 음식과 후식이 있을 것이다.

 

 

프로그래밍에서도 마찬가지다.

 

쉽게 예를 들면, 사칙연산에 관련한 사용자 정의 함수를 만들었다면

 

헤더파일을 하나 만들고, 그에 해당하는 사용자 정의 함수들을 선언해 놓으면 된다.

 

더하기, 빼기, 나누기, 곱하기 에 대한 사용자 정의 함수가 선언되게 된다.

 

나중에 프로그램이 실행되어서 사칙연산을 하게되면 해당 헤더파일을 살펴보고,

사용해야 할 함수를 사용하게 되는 것이다.

 

 

좀 더 상황을 극대화 시켜보자.

 

사칙연산도 사용하고, 미적분도 사용하고, 라플라스 퓨리에 변환까지 써야한다고 하자.

 

위의 4가지 경우를 한꺼번에 묶어서 하나의 헤더파일에서 정의해도 되지만,

 

좀 더 가독성을 좋게 하려면

 

사칙연산 따로, 미적분 따로, 라플라스변환 따로, 퓨리에변환 따로 헤더파일을 만들어 주는 것이 좋다.

 

 

 

 

그림으로 표현하자면 위와 같은 것이다.

 

이렇게 되면 메인 소스파일에서 굳이 너저분하게 사용자정의 함수를 선언 안 해도 된다.

 

 

중요한 것은

 

"만드려는 헤더파일 이름" = "만드려는 소스파일 이름"

 

이 규칙을 정확하게 지키는 것이다.

 

c 파일이건 cpp 파일이건, 대응되는 헤더파일 이름이 A 라면 

소스파일의 이름도 A 라고 해야된다.

확장자만 .c 와 .h 로 달라야 한다.

 

 

 

헤더파일 만드는 방법은 아래와 같다.

 

헤더파일에 우클릭하고, 추가, 새 항목 을 클릭하여야 한다.

 

 

헤더파일을 클릭하고

이름을 설정 한다.

 

 

처음에 써져있는

#pragma once

는 지워버리고, 코드를 작성한다.

 

 

 

다시 새항목을 만든다.

 

이번에는 소스파일로 만든다(확장자 : *.c )

 

파일 이름은 헤더파일과 똑같이 해야한다.

 

 

 

그리고 사용자 정의 함수를 만들어 준다.

 

이때 사용자 정의 함수 이름은 헤더파일에서 선언한 그대로를 사용하여야 한다.

 

함수 이름이 같아야하고, 입력받는 변수의 개수와 자료형 모두가 같아야 한다.

 

 

 

 

이제 다시 메인 소스파일로 돌아와서

 

#include "cal.h"

 

헤더파일 쪽에 위와 같이 한줄을 입력한다.

 

원래는 < >  이런 괄호 사이에 헤더파일을 입력하는데,

이런 경우는 기존의 라이브러리에만 적용되는 것이다.

 

프로젝트 폴더에 있는 사용자가 만든 헤더파일은 " " 큰 따옴표를 이용해야한다.

 

이렇게 하면 

사용자 정의함수인 sum( )을 main 소스 파일에서 선언하지 않고도

정상적으로 사용할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

코드

<1> main 소스 파일

#include <stdio.h>

#include "cal.h"


void main()
{
	printf("\n\n");
	printf("\t %d\n", sum(3, 5));
	return;
}

 

 

<2> cal.h 헤더 파일

int sum(int a, int b);

 

 

<3> cal.c 소스 파일

int sum(int a, int b)
{
	return a + b;
}

 

 

 

 

 

 

 

실행 결과

 

 

정상적으로 작동하여, 결과가 8이 출력되었다.

 

 

 

 

 

해석

main 소스 코드에서

 

#include "cal.h"  를 통해

 

사용자 정의 함수 sum(  ,  ) 을 포함하고 있는 소스파일을 연결 시켜주었다.

 

그리고 메인 함수(main() )에서 사용자 정의 함수 sum( , )을 호출하여 사용하였다.

 

 

하나의 소스파일이 아니더라도 헤더파일로 연결해주면

 

사용자 정의함수를 쉽게 사용할 수 있다.

 

 

 

 

 

 

 

결론

헤더파일을 사용하는 이유는, 가독성을 위해서이다.

 

헤더파일과 소스파일의 이름이 같아야 인식할 수 있다.

 

헤더파일에는 사용자 정의 함수의 선언만 해주고, 정의는 하지 않는다.

 

사용자 정의 함수는 헤더파일에 대응되는 소스파일에 정의한다.

 

공통되는 기능을 하는 함수들끼리 묶어서 헤더파일로 사용하면 편하고 좋다.

 

 

 

 

 

 

 

 

 

 

 

 

도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!

감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^

댓글