πŸ–₯️ Coding/C++

C++ μ—μ„œ C ν•¨μˆ˜ 호좜

SpaceJ 2021. 7. 26. 14:57
λ°˜μ‘ν˜•

C++ μ—μ„œλŠ” C μ–Έμ–΄λ₯Ό ν˜ΈμΆœν•˜λŠ” 방법은 μ•„μ£Ό κ°„λ‹¨ν•˜λ‹€. λ¨Όμ € μ•Œμ•„μ•Ό ν•˜λŠ” 것은 Name Mangling 이닀. 

C++ μ—μ„œλŠ” μ˜€λ²„λ‘œλ”©μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— C μ–Έμ–΄μ™€λŠ” λ‹€λ₯΄κ²Œ λ§€κ°œλ³€μˆ˜λ₯Ό ν¬ν•¨ν•˜μ—¬ 심볼을 μƒμ„±ν•œλ‹€. μ•„λž˜ ν‘œλ₯Ό 보면 이해가 쉽닀.

μœ„ν‚€ν”Όλ””μ•„ (name mangling) μ°Έμ‘°

(링크 : 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++μ—μ„œ ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•  수 있게 λœλ‹€.

λ°˜μ‘ν˜•