프로그래밍 일반 2014. 4. 2. 12:31

#ifdef __cplusplus 코드를 사용하는 이유

C++11 에는 매크로 __cplusplus 가 현재의 값인 199711L과 다른 (더 큰) 값으로 설정될 예정이라고 한다.


#ifdef __cplusplus

extern "C" {

#endif



#ifdef __cplusplus

}

#endif

가끔 위와 같은 코드를 보게 되는데 해당 코드는 __cplusplus 라는 것이 디파인되어 있으면 extern "C" { 를 삽입하라는 뜻이다. 이런 코드를 사용하는 이유는 C와 C++간의 링커 재사용을 위해서 이다. 처음 C++를 설계할 때 컴파일러만  새로 설계하고 링커는 기존 라이브러리를 재사용하려고 기존의 C링커를 그대로 사용하였다.  하지만 C++에서는 함수 오버로딩 등과 같은 기능을 지원하기 위해 각 함수명을 인자에 따라 컴파일러가 다르게 부여한다. (name mangling)

당연히 C에 있던 함수들도 다른 이름이 주어지게 되고 그럴 경우 라이브러리와 링크가 안된다. extern "C"라는 건 name mangling을 하지 않도록 하는 작업이다. 그렇게해야 C라이브러리를 링크할 수 있기 때문이다.

프로그래밍 일반 2014. 4. 1. 17:45

컴파일러 C++ 11 지원 여부 상태 & C++ FAQ




cplusplus_faq.pdf