C 언어 - 소스파일 나누기

컴퓨터/C

728x90
반응형

소스코드 파일 분할의 이유 

프로그래머가 프로그램을 만드는 것도 중요하지만 그 프로그램을 유지 보수하는 것 또한 매우 중요한 일입니다. 

만약에 엄청나게 큰 프로그램을 만들어서 소스코드가 몇천 줄이 넘는 프로그램을 만들었다 가정해 봅시다. 그리고 특정 부분들을 수정해야 되는 일이 생겼다면 찾아가서 유지 보수하는 것은 쉬운 일이 아닐 것입니다.

그래서 다양한 방법으로 소스코드를 구분하여 분할하고 효율적으로 관리할 수 있게 습관을 들일 필요가 있습니다.

이런 행위를 모듈화라고 많이들 말하며 좋은 프로그래머의 필수 항목 중 하나입니다.

 

소스코드 파일 분할 방법

소스코드를 분할하는 방법은 크게 2가지가 있습니다.

  • 라이브러리화
  • 여러 소스코드 파일로 분할

본문에서는 여러 소스코드 파일로 분할하는 것을 익혀보도록 하겠습니다.

 

프로젝트와 소스코드

Visual Studio를 사용하면 프로젝트를 생성하여 소스코드를 운영하게 됩니다. 

 

사용자는 이 프로젝트 안에 다양한 소스파일들을 만들어 작성할 수 있습니다. 본문에서는 2가지 소스파일을 만들어서 사용해 보도록 하겠습니다.

 

function.c 소스파일

int g_num = 1; // 전역 변수
static s_g_num = 2; // 정적 전역 변수

static int Add(int a, int b) // 정적 함수
{
	return a + b;
}
int Square(int a, int cnt) // 일반 함수
{
	if (cnt == 0)
		return 1;
	if (cnt == 1)
		return 1;
	int output = a;
	for (int i = 0; i < cnt; i++)
	{
		output *= a;
	}
	return a;
}

위의 소스파일처럼 변수 2개와 함수 2개를 만들어 function.c 소스파일에 작성을 했습니다.

 

main.c 소스파일

프로그램의 시작을 알리는 main함수가 있는 영역입니다. 그럼 function.c의 소스파일에 있는 함수와 변수를 불러서 사용해 보도록 할까요?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

extern int g_num;
// extern static int s_g_num; error
extern int Square(int a, int cnt);
// extern int Add(int a, int b); error
// extern static Add(int a, int b); error

int main()
{
    printf("%d\n", Square(2, 2));
    printf("%d\n", g_num);
    //printf("%d\n", Add(2, 2)); error
    //printf("%d\n", s_g_num); error

    return 0;
}

extern 키워드의 등장

처음 보는 extern 키워드가 등장했습니다. 이 extern 키워드는 다른 소스파일에 해당 이름을 가진 녀석이 있다는 의미를 가지고 있습니다. 

전역 변수, 함수 등 다른 소스코드 파일에 저장이 되어있다면 그것을 가져오기 위해서 extern키워드를 가지고 다시 한번 알려주어야 합니다.

  • main.c의 소스코드를 보면 extern 키워드를 이용해 g_num 변수와 Square함수를 가지고 오는 것을 볼 수 있습니다.
  • 하지만 static 키워드를 사용한 변수들은 error가 발생하여 정상적인 사용을 할 수 없는 것을 확인할 수 있습니다.

 

 

728x90
반응형

'컴퓨터 > C' 카테고리의 다른 글

C 언어 - sizeof 함수  (0) 2021.06.29
C 언어 - 함수의 원형 선언  (0) 2021.06.29
C 언어 - static 키워드 (정적 키워드)  (0) 2021.06.26
C 언어 - Stack Frame (스택 프레임)  (0) 2021.06.26
C 언어 - 다중 포인터  (2) 2021.06.24

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :