C++

extern "C"

Keisa 2024. 6. 20. 13:34

출처: https://noel-embedded.tistory.com/1078

 

extern "C" 의미

extern "C" 의미는 안에 정의된 함수 혹은 헤더파일에 관해서는 맹글링하지 말라는 의미다. 맹글링은 C++에서 사용되는 용어로, C++ 컴파일러 단계에서 함수 혹은 변수이름을 기존과 크게 다르게 바

noel-embedded.tistory.com

 

extern "C" 의미는 안에 정의된 함수 혹은 헤더파일에 관해서는 맹글링하지 말라는 의미다. 

 

맹글링은 C++에서 사용되는 용어로, C++ 컴파일러 단계에서 함수 혹은 변수이름을 기존과 크게 다르게 바꾸는 행위를 말한다. C++은 C와 다르게 클래스 속성을 이용해서 매개변수를 달리해서 함수 이름을 동일하게 사용할 수 있게 된다. 즉 다형성을 지원하기에 가능한 일이다. 따라서 C++ 컴파일러에서의 맹글링 작업은 불가분의 관계에 있다

 

[참고] https://stackoverflow.com/questions/44056461/difference-externc-vs-extern/44056776

 

extern "C"는 cpp 소스파일에서 c 소스를 가져다 쓸 때 필요하다. cpp 소스는 다형성을 지원하지만 c 소스는 함수의 유일성이 보장된다. 따라서 맹글링 작업을 거칠 필요가 없다. 하지만 extern "C"를 사용한다면 c는 함수 이름자체가 심볼이 되지만 맹글링을 거치기 때문에 컴파일러가 위치를 찾지 못하고 에러를 발생시킨다

/* test1.c */
#include <stdio.h>

void print(const char *msg) {
    printf("msg: %s\n", msg);
    return;
}
/* test2.cpp */
#include <iostream>

using namespace std;

extern "C" void print(const char *msg);

int main(void) {
    print("hello world");    
    return 0;
}
$ gcc -c test1.c 
$ g++ -c test2.cpp
$ g++ -o test test1.o test2.o
$ ./test