programing

C코드('외부 C' 필요)가 C++로 컴파일 되어 있는지 여부를 검출하는 방법

newsource 2022. 8. 15. 21:20

C코드('외부 C' 필요)가 C++로 컴파일 되어 있는지 여부를 검출하는 방법

C++ 라이브러리의 일부로서 C 헤더가 있습니다.

이 C 헤더는 C 컴파일러 또는 C++ 컴파일러에 의해 컴파일된 경우에만 의미가 있습니다.extern "C" { ... }그렇지 않으면 해결되지 않은 링크에러가 발생합니다.

다음과 같은 블록을 추가하려고 합니다.

#ifdef __cplusplus
#error "Compiling C bindings with C++ (forgot 'extern \"C\"'?)"
#endif

C 헤더에 포함되어 있습니다만, 유감스럽게도__cplusplus매크로가 정의되어 있습니다.extern "C" { ... }차단합니다.

이 상태를 올바르게 검출할 수 있는 다른 방법이 있습니까?

일반적인 방법은 클라이언트코드에 헤더를 랩하는 것을 요구하지 않는 것입니다.extern "C"조건부로 직접 그렇게 하는 것이 좋습니다.예:

#ifdef __cplusplus
extern "C" {
#endif

  // Header content

#ifdef __cplusplus
}
#endif

이렇게 하면 헤더를 포함하는 것 외에 아무것도 하지 않고 클라이언트 코드가 자동으로 수정됩니다.

언급URL : https://stackoverflow.com/questions/55099677/how-to-detect-if-c-code-which-needs-extern-c-is-compiled-in-c