헤더파일 만들기 (*.h)
- 헤더 파일의 구성
헤더 파일의 기본형식은 아래의 구성을 따른다.
// this .h file's name is "awesome_lib.h"
// start here to define new lib.h file
#ifndef __AWESOME_LIB_H__
# define __AWESOME_LIB_H__
[include할 다른 헤더 파일 명시]
[상수 및 매크로 정의]
[사용자 type 정의 ; type, struct 등]
[전역 변수 선언]
[함수 선언]
// end here to define new lib.h file
#endif
1. 시작은 #ifndef / ~#define~ / 끝은 endif
헤더 파일의 시작은 #ifndef [헤더 구분자]
로, 끝은 #endif
로 감싼다. #ifndef [헤더 구분자]
바로 다음에는 #define
문을 위치시킨다.
[헤더 구분자]
의 명명 규칙은 아래와 같다.
- 헤더 파일명에서 소문자를 대문자로 바꾸고,
- 온점
.
을 언더바_
로 바꾸고- 파일 이름 앞뒤로 두 개의 언더바
__
를 붙인다.
예를 들어...
awesome_lib.h => __AWESOME_LIB_H__
my_str_ft.h => __MY_STR_FT_H__
PROJECT_HEADER.hpp => __PROJECT_HEADER_HPP__
2. 다른 헤더파일 include
헤더 파일의 특징은 파일 내에 따로 로직을 구현하지 않는다는 것이다. 따라서 코드로직을 고려하지 않기에 따로 stdio.h
나 unistd.h
와 같은 다른 헤더파일을 include하지 않는다. 그러나 다른 헤더파일에 선언된 type을 신규로 만들어지는 함수의 파라미터나 리턴으로 사용하는 경우에는 어쩔 수 없이 #include <대상 헤더파일>
할 수 밖에 없다.
>> write 함수에 파라미터로 던져주는 메세지를 정의하는 경우
#ifndef __NBR_BOOLEAN_H__
# define __NBR_BOOLEAN_H__
#include <unistd.h>
...
...
# define EVEN_M "there is an even number.\n"
# define ODD_M "there is an even number.\n"
3. 상수 및 매크로 정의
상수 또는 매크로를 선언할 때는 #define
을 쓰거나 const
를 쓴다.
// #define [상수명] [상수값]
#define PI 3.141592
#define ROOT_PI 1.772453
// 혹은
// const [type] [상수명] = [상수값]
const double PI = 3.141592
const double ROOT_PI = 1.772453
4. 사용자 type 정의
사용자 정의 type을 기술하는 부분이다. 이 부분에서는 사용자 정의 type인 struct, union 등을 정의한다.
typedef struct {
char name[20];
int age;
char gender;
char addr[128];
......
} custom_t;
typdef long int file_size_t;
......
5. 전역 변수 선언
전역변수는 .c에서 정의된 변수를 다른 곳에서도 사용하기 위하여 헤더에 선언하며, 그 앞에는 반드시 extern
키워드를 덧붙인다.
extern long long gl_all_strs_len;
extern
을 붙이는 것은 변수가 해당 파일이 아닌 다른 파일에 정의되어 있으며, 해당 구문에서는 그 정의를 끌어다 쓰는 것을 의미한다. extern
을 붙이지 않았을 시, 헤더파일은 해당 변수를 선언이 아닌 정의한다. 이 경우, 해당 헤더파일을 include
한 소스에서 전역변수가 정의되는 결과를 낳기에 전역변수 오류가 날 가능성이 있다. 물론 위처럼 쓰기 위해 .c 소스 중 한 군데에서 long long gl_all_strs_len;
을 정의하는 정의부가 있어야 한다.
6. 함수 선언
여기서는 함수의 프로토타입을 선언한다.
extern int sum(int nbr1, int nbr2);
extern int sum(int, int); // 굳이 들어가는 파라미터의 이름을 지칭하지 않아도 된다.
extern int init(void) // 파라미터가 아무것도 들어가지 않는 경우 [함수명](void)라고 꼭 지칭하여야 한다.
Author And Source
이 문제에 관하여(헤더파일 만들기 (*.h)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@two_jay/dd저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)