반응형
extern 키워드의 이해
C언어에서 컴파일은 파일 단위로 문법이 제대로 사용되었는지 확인하기 때문에 다른 파일에 정의된 함수나 변수, 혹은 코드 뒤에 정의된 함수나 변수를 사용하려 하면 undefined 에러가 발생한다.
이 때 사용하는 변수나 함수가 다른 파일에 정의되어있으니 걱정말고 컴파일 하라고 extern 키워드를 사용하여 컴파일러에게 알려준다.
// main.c
extern int add(int a, int b);
int main()
{
return add(3, 2);
}
int add(int a, b)
{ return a+b; }
많은 경우 이러한 선언된 함수나 변수를 해더파일에 넣어 사용하는 소스코드에서 include 하여 사용하는 형식을 취한다.
// main.c
#include "add.h"
int main()
{
return add(3, 2);
}
// add.h
extern int add(int a, int b);
// add.c
int add(int a, int b)
{ return a+b; }
처음엔 정의된 함수가 들어있는 파일을 include하지 않고 단지 선언해준 파일을 include하는 것이 이상할 수 있는데 이같이 떨어져있는 함수는 컴파일 다음 단계인 link단계에서 해당 함수를 찾아 호출하는 곳에서 정의된 함수를 연결해주게 된다. 만약 선언만 되어있고 정의가 되어있지 않다면 link에러(LNK2019와 같은)가 발생할 것이다.
반응형
'Programming > C' 카테고리의 다른 글
가변인자함수 (0) | 2014.05.23 |
---|---|
[ERROR] Run-Time Check Failure #2 - Stack around the variable 'my_variable' was corrupted. (0) | 2014.05.21 |
Visual studio C/C++에서 사용하지 않는 함수 찾는 방법 (0) | 2014.05.19 |
static inline (0) | 2014.05.15 |