일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- nas
- 코틀린개발환경
- NAS HDD교체
- gitlab
- 네이버클라우드
- 3D 프린터 용어
- 리눅스 파일동기화
- 데이터 직렬화 포맷
- OnlineIDE
- octoprint
- kubernetes
- 3D
- IoTNetwork
- C언어
- Kotlin
- git
- 3D프린터 입문
- docker container
- 3d프린터 초보
- Notification
- Jenkins
- 3D프린터
- data serialization formats
- 3D프린터입문
- Token인증방식
- 3D모델링
- github
- linux job
- docker
- ci/cd
- Today
- Total
0과 1을 공부하다.
[C] 헤더파일과 프로그램 모듈화 본문
프로그래밍 공부를 하며 작성한 소스코드는 간단하고 Code Line이 비교적 짧지만 상용 소프트웨어는 매우 복잡하고 장문의 Code Line이 생긴다. 또한 다른 사람과 협업하여 기능을 구현해 하나의 프로그램을 완성시키고는 한다. 본 포스팅에서는 C프로그래밍의 헤더파일에 대해 알아보고 모듈화 하는 과정에 대해 알아보겠다.
헤더파일
C/C++ 언어에서 헤더파일( .h )은 주로 외부 소스코드 파일에서 정의된 변수나 함수를 쓰기 위한 일종의 레퍼런스로 컴파일러가 기본적으로 지원하는 표준헤더(stdio. math, time)와 사용자가 임의로 만든 사용자 헤더로 나눠진다.
헤더파일을 사용하기 위에 전처리기에서 선언하는 방법은 아래와 같다.
#include<stdio.h> // 표준헤더파일
#include"Test.h" // 사용자정의 헤더파일
표준헤더파일 정의와 사용자정의 헤더파일의 차이점은 파일명을 <>로 정의하면 표준헤더파일이고 " "로 정의하면 사용자 정의 헤더파일이다. 사용자 정의 헤더파일은 소스코드 파일과 동일 경로에 있으면 경로를 생략해도 되지만 다른 경로에 있는 파일이라면 절대경로를 지정해줘야 한다.
프로그램 모듈화
C/C++ 를 이용하여 프로그램을 제작하다보면 소스코드가 매우 길어지거나 다른사람과 함께 작성하는 일이 생길 수 있다. 이 과정에서 소스코드파일을 작은 단위로 분할하여 작성하는 모듈화 과정이 필요하다. 복잡한 코드를 정리하기 위해 비슷한 기능끼리 정리하여 다른 사람과 업무를 분담하여 작성을 하게 될 것이다. C언어는 앞서 설명한 헤더파일을 이용하여 작성한다. 아래 코드는 두 수를 더하는 기능을 가진 함수 1개와 값을 저장하는 변수 1개를 포함한 헤더파일을 구현하고 헤더파일을 로드하여 함수를 이용하는 코드이다.
<data.h 소스코드>
// data.h 소스코드
int result = 0;
int sum(int a, int b)
{
return a + b; // 매개변수 a와 b를 더해서 반환
}
<main. c 파일 소스코드 >
// main.c 파일 소스코드
#include <stdio.h>
#include "AddCode.h"
// extern 키워드를 사용하여 외부파일에 정의되어 있음을 명시.
extern int result;
extern int sum(int, int);
int main()
{
result = sum(10,20); // AddCode.h 파일에 선언되어 있는 result 변수와 sum함수 사용
printf("결과: %d\n", result);
return 0;
}
위 코드를 살펴보면 main.c 에서는 함수와 변수가 정의된 data.h를 사용하기 위해 파일을 전처리하였고 파일 내부 변수와 함수를 사용하기 위해 extern 키워드를 사용해 내부에 선언되어 있는 파일임을 명시하였다.
하지만 매번 모든 변수 및 함수를 extern 키워드를 사용하여 선언하기에는 불편함이 따를 수 있다. 문제를 해결하기 위해 변수 및 함수를 선언하는 부분의 헤더파일을 별도로 만들어주면 가능하다. 아래 코드내용은 함수 및 변수 선언과 정의를 분리한 data.cpp 파일이 포함된 코드이다.
<data.h 소스코드>
// data.h 파일, data.c 속의 변수 및 함수의 선언만 담고 있다.
int result;
int sum(int, int)
<data.c 소스코드>
// data.c 소스코드
#include "data.h" // 변수 및 함수 선언부분 h파일 포함
int result = 0;
int sum(int a, int b)
{
return a + b; // 매개변수 a와 b를 더해서 반환
}
<main. c 파일 소스코드 >
// main.c 파일 소스코드
#include <stdio.h>
#include "AddCode.h"
// extern 키워드를 이용한 선언 생략가능.
int main()
{
result = sum(10,20); // AddCode.h 파일에 선언되어 있는 result 변수와 sum함수 사용
printf("결과: %d\n", result);
return 0;
}
위의 코드와 같이 선언만을 담은 헤더파일을 추가함으로써 다른 파일에서 사용 할 경우 extern 키워드를 생략 할 수 있었다.
추가로, 헤더파일 내에서 사용된 변수 또는 함수가 외부 파일에서의 사용을 제한하고자 한다면 앞서 배운 정적변수(static) 선언을 하면 된다.
마지막으로 정리하자면 C언에서는 함수 및 변수를 정의하여 헤더파일(h)에 정의할 수 있으며, 컴파일 과정은 파일단위로 이뤄진다. (a.c와 b.c가 동시에 컴파일하여 하나의 파일을 만들 때 서로 참조하지 않는다.) 모듈화를 통해 길고 복잡한 코드를 다른사람과 함께 작성하여 가독성과 유지/보수의 용이하도록 할 수 있다.
헤더파일과 프로그램 모듈화 끝.
* CopyRight 2021. Jay Park All rights reserved.
'Study > C, C++' 카테고리의 다른 글
[C] C언어 키워드(Keyword) 정리 (0) | 2021.10.06 |
---|---|
[C++] 구조체와 클래스 (Struct, Class) (0) | 2021.09.29 |