가령 헤더파일 생략하고
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선언을 쓰고 안쓰고 하며 구분해주는 사람도 있다
절대경로를 대신하는 상대경로의 지정방법 (0) | 2020.10.04 |
---|---|
#include 지시자와 헤더파일의 의미 (0) | 2020.10.04 |
static 전역변수 (0) | 2020.10.04 |
텍스트 데이터와 바이너리 데이터를 동시에 입출력하는 함수 (0) | 2020.10.04 |
기타 함수들 (0) | 2020.10.04 |