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

+ Recent posts