static이 내부 연결 (internal linkage)를 수행한다면, extern은 외부연결(external linkage)를 수행함으로써, 파일을 넘어서 전체 프로그램에서 유효하도록 하기 위함이다.
사용 방법은 하나의 변수당 한 번만 선언되어야 하고, 한 번만 정의 될수 있다.
아래는 사용 예시이다. "myvar.h"에서 extern 키워드가 없으면 링킹이 되지 않아서 빌드 에러가 발생한다.
"var.h"
extern int myvar; // extern variable declaration
"var.cpp"
#include "var.h"
int myvar = 0; // extern variable definition
"dog.h"
void do_dog();
"dog.cpp"
#include <iostream>
#include "var.h"
#include "dog.h"
void do_dog()
{
myvar += 1000;
std::cout << myvar << std::endl;
}
"cat.h"
void do_cat();
"cat.cpp"
#include <iostream>
#include "var.h"
#include "cat.h"
void do_cat()
{
myvar += 10;
std::cout << myvar << std::endl;
}
"main.cpp"
#include "dog.h"
#include "cat.h"
int main()
{
do_cat(); // 10
do_dog(); // 10 + 1000 = 1010
}
참고
Brian Kernighan & Dennis Ritchie, <The C Programming Language> 2nd edition
Bjarne Stroustrup, <The C++ Programming Language> 4th edition
'프로그래밍 언어 > C' 카테고리의 다른 글
C - 키워드 static (0) | 2021.01.24 |
---|