extern은 링크 규칙(linkage)을 정하기 위한 키워드이다. 함수와 변수는 static, const 등에 의해 모듈(.cpp 파일) 안에서만 참조할 수 있는 internal linkage 를 갖는 경우를 제외하고 기본적으로 external linkage 를 갖게 되어서 다른 모듈에서 링크할 수 있게 된다.
외부 모듈의 함수나 변수를 링크 하려면 extern 키워드를 사용해 링크하려는 대상을 찾을 수 있도록 해준다. C++에서 그냥 extern 만 사용하면 extern "C++" 과 같은 뜻이다. 그리고 extern "C" 를 적용하면 이 이름을 찾아 링크하려는 녀석이 C라는 의미다. 따라서 C 이름 장식을 사용하게 된다. gcc는 gcj를 통해 자바와 링크할 수 있어 extern "Java"도 가능하다. gcj로 컴파일된 자바 모듈을 찾아서 링크할 수 있도록 하라는 의미다. 기술적/실용적 이유에서 사실상 대부분 컴파일러가 extern "C++"과 extern "C"만 지원하지만, extern "X"의 "X" 자리에 어떤 언어든, 또는 어떤 링크 규칙이든 들어올 수 있다.