C언어 파일분활과 헤더파일 소스코드 분활

    2018-02-10 18:18:16 작성

    변수나 함수의 정의를 용도 및 특성별로 나누어 각각의 파일로 저장하면 소스코드의 관리가 용이해집니다.

    #include <stdio.h>
    
    int gNum = 0;
    
    void addNum(int value) {
    	gNum+= value;
    }
    
    int getNum(void) {
    	return gNum;
    }
    
    int main(void) {
    	printf("%d\n", getNum());
    	addNum(8);
    	printf("%d\n", getNum());
    	return 0;
    }

    위와 같은 코드가 한개의 파일에 있다면 특성별로 나누게 된다면 다음과 같이 3부분 으로 나눌수 있습니다.

    그냥 이렇게 나누어 저장하고 컴파일을 하게 되면 에러가 발생합니다.
    컴파일은 파일단위로 진행되기 때문에 외부의 파일에 정의된 변수나 함수를 컴파일러에게 알려줘야 하며 이때 사용하는 키워드가 extern입니다.


    extern

    외부파일에 있는 선언 및 정의를 컴파일러에게 알립니다.

    위의 그림과 같이 extern 선언을 통해 변수 및 함수가 외부에 정의 되어 있다는 것을 컴파일러에게 알려줘야 하며 이때 구체적으로 어느 파일에 정의되어 있는지 까지는 알리지 않아도 됩니다.


    static 전역변수

    전역변수에 static을 선언하게 되면 그 변수는 외부 파일에서 접근을 차단합니다.
    static 전역변수는 파일 내부에서만 접근 가능하게 됩니다.
    함수에도 static 선언을 하여 회부 파일에서의 접근을 차단할 수 있습니다.
    함수의 경우 다음과 같이 반환형 앞에 static을 선언합니다.

    static void addNum(int) {
    	...
    }

    이렇게 전역으로 static을 선언하게 되면 외부파일에서 extern을 선언하더라도 접근이 불가능합니다.