C:File Division

aiden·2023년 5월 30일
0

C

목록 보기
27/28

파일 분할은 프로그래밍을 하는 데 있어 중요한 부분이다. 간단한 예제에서는 굳이 분할하지 않았지만, 코드가 길어지고 프로그램이 커지면 지금처럼 하나의 파일에 쭉 작성할 수는 없다. 특히 C++이나 JAVA와 같은 객체지향 언어들은 파일을 나누는 것이 빈번하다. 이는 모듈화와 관련이 있다.

File Division

extern

그렇다면 파일 분할은 어떻게 하는 것이 적절할까?
파일을 분할한 상태로 빌드를 할 때 컴파일러는 파일 단위로 컴파일을 하므로 해당 파일 외부에 선언, 정의되었다는 것을 알려줘야한다. 다음과 같이 extern 키워드를 사용한다.

extern int num; //파일 외부에 선언된 변수 num
extern int Func(int a, int b); //파일 외부에 선언된 함수 Func

static

static 전역변수를 선언하면, 이 변수를 외부 파일에서 접근할 수 없음을 의미한다. 해당 변수의 접근 범위는 파일 내부로 제한되고, 다른 파일에서는 위에서처럼 extern을 선언한 뒤 사용하는 것이 불가하다. 다음과 같이 선언하면 된다.

static int num = 10; //변수 num은 외부 파일에서 접근 불가

함수 또한 static 선언을 할 수 있는데, 마찬가지로 외부 파일에서 이 함수를 접근할 수 없음을 의미한다. 파일 내에서만 접근 가능하다. 다음과 같이 선언한다.

static int Func(int a, int b){
	return a + b;
}

헤더파일

우선 항상 코드 맨 위에 작성했던 #include가 무엇을 의미하는지 알아야 한다. #include는 지시자로, 지시하는 파일의 내용을 끌어다 놓는 것이다. 다음 예시를 보자.

#include 지시자를 이용하면 헤더파일의 내용을 그 자리에 그대로 가져올 수 있다.
(이 때, 세 파일은 모두 같은 디렉토리에 존재해야 컴파일 가능)

헤더파일을 include하는 것은 두 가지 방식으로 작성할 수 있다.

#include <name.h>
#include "name.h"

두 문장은 같은 역할을 하는데, 첫 번째 방식은 표준 헤더파일이 저장되어 있는 디렉토리에서 파일을 찾는 경우이고 두 번째는 현재 파일이 저장된 디렉토리에서 파일을 찾는 경우로 새로 정의한 헤더파일을 포함할 때 사용한다.

헤더파일 지정 시 절대경로를 이용하거나 상대경로를 이용할 수 있다.

헤더파일에는 보통 변수나 함수, 구조체의 선언을 작성하여 외부 파일에서 쉽게 접근할 수 있도록 한다.

👉🏻파일 간 헤더파일 포함으로 같은 구조체가 여러 번 정의되는 경우 문제가 발생할 수 있다. 만약 다음과 같은 포함 관계가 있는 경우를 생각해보자.

이 때 매크로를 이용하면 문제를 해결할 수 있다.

다음과 같이 #ifndef ,#define, #endif로 감싼다.

profile
파인애플 좋아하세요?

0개의 댓글