헤더 파일
컴퓨터 프로그래밍에서, 특히 C와 C++ 프로그래밍 언어에서, 헤더 파일(header file) 또는 인클루드 파일(include file)은 컴파일러에 의해 다른 소스 파일에 자동으로 포함된 소스 코드의 파일이다. 일반적으로 헤더 파일들은 다른 소스 파일 속의 첫 부분에 포함된다.
C와 C++ 프로그래밍 언어에서, 표준 라이브러리 함수는 전통적으로 헤더 파일 안에서 선언되어 있다. C 표준 라이브러리와 C++ 표준 라이브러리에 많은 함수들이 존재한다. 함수들은 사용자가 API 수준에서 알아야 한다. 따라서 개발 도구를 만드는 입장에서, 함수 자체를 설계하고 코딩을 한 측에서 제공해야 한다. 라이브러리 오브젝트 코드는 파일로 존재하고 헤더 파일에 함수나 변수의 형이 선언되어 있으므로 사용자 측에서 붙여 사용하면 된다. 사용자 측에서 사용한 라이브러리는 라이브러리 파일의 코드를 링커가 응용 프로그램에 붙여 전체 실행 코드가 완성된다. 결국 헤더 파일의 형을 사용하여 라이브러리 사용자의 인클루드에 의해 함수 호출이 방식이 결정된다.
C/C++ 헤더 파일 사용 예
[편집]대표적으로 C언어에서 많이 사용하는 printf함수는 stdio.h 표준 라이브러리에 존재한다.
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("출력 함수 사용 예\n");
return 0;
}
여기서 실시간 라이브러리 함수 printf 코드는 라이브러리 파일에 존재하고, stdio.h 헤더 파일에 형이 선언 되어 있다.
헤더 파일의 가장 일반적인 형태는 다음과 같은 예에서 볼 수 있다.
헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
// 파일: MyFunc.h
#ifndef _MYFUNC_H
#define _MYFUNC_H
// 함수의 형을 선언하여 호출 시,
// 인수의 형태를 알린다.
//
int add(int a, int b);
#endif
|
// 파일: MyFunc.c
#include "MyFunc.h"
int add(int a, int b)
{
int c;
c = a+b;
return c;
}
|
// 파일: main.c
#include <stdio.h>
#include "MyFunc.h"
int main(int argc, char *argv[])
{
int c = add(10,20);
printf("10 + 20 = %d\n", c);
return 0;
}
|
헤더파일에서는 사용하는 코드는 형을 알리는 형태가 가장 일반적이다. 프로세서가 실행될 때 변수 공간을 잡는 형태는 중복에 의해 문제가 될 수도 있다. 헤더파일의 사용은 여러 파일에서 중복으로 인클루드로 붙여서 사용하는 것이 일반적이기 때문이다.
형을 알리는 C/C++ 코드 :
- #define
- enum
- struct 헤더 부
- 클래스 선언 부
- 함수 형
등이 대표적이다.
따라서 이것들은 헤더 파일에 넣는 것이 일반적이다. 헤더 파일에 변수의 선언은 C/C++ 언어 입장에서는 문제가 없지만 프로그래밍 코드가 복잡해 지면 혼돈의 염려가 있으므로 습관된 헤더 파일 사용 방법 숙지가 필요하다.
적절하지 못한 헤더 파일 사용 예 :
헤더 파일 | 실시간 함수 | 메인 함수 |
---|---|---|
// 파일: MyFunc.h
#ifndef _MYFUNC_H
#define _MYFUNC_H
char gbuff[256];
char *addString(char *pa, char *pb);
#endif
|
// 파일: MyFunc.c
#include <string.h>
#include "MyFunc.h"
char *addString(char *pa, char *pb)
{
strcpy(gbuff, pa);
strcat(gbuff, pb);
return gbuff;
}
|
// 파일: main.c
#include <stdio.h>
#include "MyFunc.h"
int main(int argc, char *argv[])
{
char *pstr = addString("첫 문자", "다음");
printf("%s\n", pstr );
return 0;
}
|
같이 보기
[편집]외부 링크
[편집]- (영어) Organizing Code Files (the potential pitfalls and guidelines for using header files in C++)
- (영어) C++ header file inclusion rules
이 글은 프로그래밍 언어에 관한 토막글입니다. 여러분의 지식으로 알차게 문서를 완성해 갑시다. |