KPlay의 코딩 그리고 잡동사니

가령 헤더파일 생략하고

int num = 0;

void Increment(void) {

num++;

}

int GetNum(void) {

return num;

}

int main(void) {

printf("num: %d \n", GetNum());

Increment();

printf("num: %d \n", GetNum());

return 0;

}

이라는 코드가 있다고 가정해보자

이것을 전역변수 num만 있는 파일 하나, 두 함수가 있는 파일 하나, 마지막으로 main함수가 있는 파일하나

총 세개의 파일로 나눴다고 가정했을때 컴파일이 가능한가? 되지않는다

컴파일러는 전역변수 num부터 순서대로 컴파일한다고 쳐도 파일이 바뀌면 앞에서 컴파일한것을 기억하지 않는다

위는 예제라서 짧고 나눠 컴파일할 필요도 없지만 실제로 현업에서 프로그램을

여러사람과 만들며 아주 많은양의 코드와 기능을 담은 프로그램을 만든다고 할 때

필수적으로 파일을 나눠서 코딩을 하게된다.

이때, exturn 선언을 붙여주면 외부 어딘가에 존재하니 컴파일러에게 컴파일을 하라고 지시할 수 있다.

int num = 0;

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

extern int num;

void Increment(void) {

num++;

}

int GetNum(void) {

return num;

}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

extern void Increment();

extern int GetNum();

int main(void) {

printf("num: %d \n", GetNum());

Increment();

printf("num: %d \n", GetNum());

return 0;

}

이렇게해놓으면 정상적으로 컴파일이 된다.

추가로 함수같은 경우는 exturn선언을 해주지 않아도 정상적으로 컴파일이 되기때문에

exturn을 그냥 다 빼버리는 사람도 있고 외부에서 가져와야하는 함수와 현재파일에 있는 함수를 구분하기위해

exturn선언을 쓰고 안쓰고 하며 구분해주는 사람도 있다

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band