extern 은 변수정의가 아니라 변수가 외부 모듈에 정의되어 있을 수 있다는 것을 나타내는 것입니다.
#include <stdio.h>
#include <conio.h>
extern int i;
static int j;
int main(void)
{
i = 1;
j = 2;
printf("%d\n",i);
printf("%d\n",j);
getch();
return 0;
}
위 프로그램을 실행하면 [Linker Error] Unresolved external '_i' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ 에러가 납니다.
변수 i 에 대한 정의가 외부모듈에 있을 거라고 생각했는데 link 하려고 보니까 없거든요.
변수 i 를 사용하려고 했으나 이 모듈에는 없다, 그렇다면 외부모듈에 정의가 있어야 하는데 없습니다.
#include <stdio.h>
#include <conio.h>
extern int i;
static int j;
int i;
int main(void)
{
i = 1;
j = 2;
printf("%d\n",i);
printf("%d\n",j);
getch();
return 0;
}
위 소스는 정상 작동합니다. 변수 i 에 대한 정의가 있기 때문입니다. 하지만 extern 이 있으므로 다른 모듈에서 정의해도 됩니다. static 은 이 모듈에서만 사용하겠다는 이야기입니다.
http://blog.aladdin.co.kr/776779115/1109448
|