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
'programing' 카테고리의 다른 글
Java에서 2차원 배열을 만들기 위한 구문 (0) | 2022.08.15 |
---|---|
'JSON.stringify'를 쓰면 Vue 구성 요소가 로드될 때 오류가 발생합니다. (0) | 2022.08.15 |
Vue2에서 동적 $refs 값을 가져오는 중 (0) | 2022.08.15 |
상수 0.0039215689는 무엇을 의미합니까? (0) | 2022.08.15 |
Java 메서드를 폐지된 것으로 선언하거나 마킹하려면 어떻게 해야 합니까? (0) | 2022.08.15 |