__cplusplus 매크로 의미

2019. 10. 19. 01:03PL/C++

https://noel-embedded.tistory.com/1078 해당 글에서 extern "C"의 의미를 대략 파악했다. 결국에는 c 소스를 cpp에서 가져다 쓸 때 맹글링 작업을 막는 것이다

 

https://code.woboq.org/gcc/include/c++/7.2.1/cstdio.html

 

stdlib.h 안에 내용인데 ifdef __cplusplus가 정의되어 있다

다시 한 번 복기하면 extern "C"는 cpp 소스가 c 소스를 include 했을 때 맹글링 방지를 위한 도구였다. 그런데 코드는 그래도 있고, 만약에 c소스에서 c소스를 불러온다면 어떻게 될까? 컴파일 에러가 난다. 왜냐하면 extern "C"는 cpp에서만 정의되는 식별자이다. 따라서 c, cpp에 대해서 모두 불러와지기 위해서는 컴파일러를 검사한 후 cpp이라면 extern 처리를 해주는 것이다

 

따라서 보통 ifdef __cplusplus 두 번을 통해 정의할 수 있다

#ifdef __cplusplus
extern "C" {
#endif
	
    /* all C declarations come here... */

#ifdef __cplusplus
}
#endif

 

'PL > C++' 카테고리의 다른 글

char *과 const char *  (0) 2019.10.25
constexpr  (0) 2019.10.23
virtual 키워드를 사용해야 하는 이유  (0) 2019.10.17
temp 변수 없이 swap 하기  (0) 2019.10.16
C6011: NULL 포인터 'var'을 역참조하고 있습니다 에러 해결  (0) 2019.10.12