Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C++ 코드에서 extern "C"를 사용하는 이유는 무엇일까?

C++ 코드에서 extern "C"를 사용하는 이유

C++ 코드에서 C 언어로 구현되었거나 C 컴파일러로 빌드된 함수를 선언할 때는 반드시 extern "C"를 사용해야 합니다.

extern "C"를 붙이면 컴파일러에게 C 언어의 네이밍 규칙과 호출 규약(calling convention)을 그대로 사용하라고 지시하는 것이 됩니다. 즉, C++ 코드 안에서 해당 부분만 일종의 'C 모드'로 동작하도록 만드는 것입니다.

왜 이런 처리가 필요한가?

핵심적인 이유는 네임 맹글링(name mangling) 때문입니다. C++ 컴파일러는 함수 오버로딩을 지원하기 위해, 함수 이름에 매개변수 타입 등의 정보를 덧붙여 심볼 테이블에 고유한 형태로 기록합니다. 반면 C 컴파일러는 이러한 이름 변형 없이 원래의 함수 이름을 그대로 사용합니다.

따라서 맹글링 방식이 서로 다르기 때문에, extern "C" 없이 C++ 코드에서 C로 컴파일된 함수나 라이브러리를 호출하면 링커가 해당 심볼을 찾지 못해 링크 오류가 발생할 수 있습니다. extern "C"를 선언하면 함수 이름이 C 스타일로 유지되므로, C로 빌드된 오브젝트 파일이나 라이브러리와 정상적으로 연결됩니다.