C++ μμλ C μΈμ΄λ₯Ό νΈμΆνλ λ°©λ²μ μμ£Ό κ°λ¨νλ€. λ¨Όμ μμμΌ νλ κ²μ Name Mangling μ΄λ€.
C++ μμλ μ€λ²λ‘λ©μ μ§μνκΈ° λλ¬Έμ C μΈμ΄μλ λ€λ₯΄κ² λ§€κ°λ³μλ₯Ό ν¬ν¨νμ¬ μ¬λ³Όμ μμ±νλ€. μλ νλ₯Ό 보면 μ΄ν΄κ° μ½λ€.
(λ§ν¬ : https://en.wikipedia.org/wiki/Name_mangling)
CμΈμ΄μ C++μ μ»΄νμΌ λ°©μμ΄ λ€λ₯΄κΈ° λλ¬Έμ μμν C νλ‘κ·Έλ¨μ C++μ λ΄μ₯νμ¬ μ¬μ©νκΈ° μν΄μλ C μΈμ΄λ‘ μμ±λ μ½λμ λν΄μλ C μ»΄νμΌλ¬λ₯Ό μ μ©νλΌλ λ΄μ©μ μ»΄νμΌλ¬μκ² μλ €μΌ νλ€. μλμ κ°μ΄ extern "C"λ‘ λ¬Άμ λ΄μ©μ C++ μ»΄νμΌ λ°©μ λμ C μ»΄νμΌ λ°©μμ΄ μ μ©λλ€. "_cplusplus"λ μ»΄νμΌ μμλ‘ c++ μ»΄νμΌλ¬λ‘ μ»΄νμΌμμλ§ extern "C"κ° μ μ©λ μ μλλ‘ νκΈ° μν¨μ΄λ€.
#ifdef __cplusplus
extern "C" { // no name mangling start
#endif
...
...
...
#ifdef __cplusplus
} // no name mangling end
#endif
C → C++
μ΄μ 본격μ μΌλ‘ C++μμ CμΈμ΄λ₯Ό νΈμΆνλ λ°©λ²μ λν΄μ μμ보μ.
extern "C" {
#include "custom.h"
#include <stdio.h>
...
}
μμ κ°μ΄ "custom.h"λ₯Ό includeνκ² λλ©΄, customμ μ μλ ν¨μλ₯Ό C++μμ νΈμΆν΄μ μ¬μ©ν μ μκ² λλ€.