내가 쓰고있는 라이브러리의 API를 작업 중입니다. 도서관 자체에 기록됩니다 c++
,하지만 API를 사용하여 내보낼 extern "C"
최고의 언어 간 호환성 (I은 나중에 API를 소모 될 것이다 C#
, C++
어쩌면, C
그리고 몇 가지 다른).
분명히 API는 전체 클래스 또는 기타 c++
특정 기능 (예 : 예외 발생)을 포함 할 수 없지만 내 질문은 다음과 같습니다.
bool
내 보낸 API에서 유형을 사용할 수 있습니까 ? 결국 POD입니다.C
코드 에서 사용할 수 있도록 헤더 파일에 어떻게 선언해야 합니까?나는 마침내 계속해서 그것을 테스트했습니다. 다음은 테스트 프로그램입니다.
test_cpp.cpp;
#include "test.h"
class C {
int a;
public:
C() : a(42) {}
int getA() { return a; }
void setA(int v) { a=v; }
};
int get7(bool b) { return b ? 7 : 3; }
C c;
C* getC() { return &c; }
int getA(C* t) { return t->getA(); }
void setA(C* t, int v) { return t->setA(v); }
test_c.c :
#include <stdio.h>
#include "test.h"
int main()
{
C* c = getC();
printf("%d\n", getA(c));
setA(c, 10);
printf("%d\n", getA(c));
printf("%d\n%d\n%d\n%d\n", get7(0), get7(1), get7(2), get7(-1));
return 0;
}
test.h :
#ifdef __cplusplus
extern "C" {
#else
#define bool _Bool
#endif
struct C;
typedef struct C C;
int get7(bool b);
C* getC();
int getA(C* t);
void setA(C* t, int v);
#ifdef __cplusplus
}
#endif
Windows에서 mingw64 gcc-4.9.0으로 컴파일
gcc -c test_c.c
g++ test_cpp.cpp test_c.o
제대로 컴파일되고 실행되었습니다. 가볼만한 곳:
g++
C
a로 선언 struct
되고 나중에 a 로 정의 되는 데 전혀 문제가 없었 습니다.class
bool
및 c
_Bool은 서로 바꿔서 작동했습니다.MS 컴파일러 (VS2012)로 시도했는데 설명 할 수없는 작은 세부 사항을 제외하고는 동일하게 작동했습니다. 헤더 파일에서 변경해야했습니다.
int get7(bool b);
...에
int get7(bool);
컴파일 할 수 있습니다. 누구든지 이것을 설명 할 수 있다면 나는 그것을 이해하게되어 기쁠 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다