C 프로그램에서 C++ 라이브러리 함수를 실행하고 싶지만 어떻게 할 수 있는지 모르겠습니다. C++ 프로그래머와 마찬가지로, 나는 C++ prog 하에서 c 프로그램을 사용하는 법을 안다. 따라서 C++ 라이브러리 함수, 즉 cout, vector 등을 사용하여 가능한가 궁금합니다.c 프로그램에서 C++ 라이브러리 함수를 사용할 수 있습니까?
1
A
답변
5
일반적으로, 당신은, 그러나
C.
에 라이브러리가 그들extern "C"
를 선언함으로써, C 프로그램에 그 기능의 일부를 수출하도록 선택할 수 있습니다 ++은 C를 C++ 기능을 사용할 수 없습니다. C++ 라이브러리가이 작업을 수행하지 않으면 이렇게하는 래퍼 (C++)를 작성해야합니다.
이러한 내 보낸 기능은 C의 제한 사항을 준수해야합니다. 예를 들어 POD가 아닌 유형, 함수 오버로딩, 연산자 오버로딩, 변환 연산자, RTTI, 예외, 템플릿 등을 사용할 수 없습니다.
1
Chris Jester-Young은 말했듯이 직접 사용할 수 없습니다. 그러나 C++에서 기능을 일반 c 함수로 내보내는 래퍼를 작성할 수 있습니다.
기본적으로 핸들 (예 :이 포인터를 int로), Destroy-Method (예 : DestroyVector)를 사용하여 핸들을 가져 와서 개체를 삭제하는 Create-Method (예 : CreateVector)를 작성합니다. 그런 다음 개체의 각 멤버 메서드를 래핑해야합니다. 래퍼 메서드에는 핸들러라는 추가 인수가 필요하다는 점을 제외하면 동일한 시그니처가 있습니다.
이것은 - 반복되는 작업의 양을 감싸는 방법에 따라 다릅니다. 그러나 쉬운 일입니다. "핸들을 사용한 C의 객체 지향 프로그래밍"의 예를 보려면 Windows-API를 살펴보십시오.
0
사용할 C++ 함수 주위에 extern "C"
래퍼 함수를 만들어야합니다. 이 단계에서는 원하는 기능의 이름을 수동으로 선택해야합니다.
//Header file:
#ifdef __cplusplus
extern "C" {
#endif
int *find_int(int *first, int *last, int value);
#ifdef __cplusplus
}
#endif
//C++ source file:
int *find_int(int *first, int *last, int value) {
return std::find(first, last, value);
}
는 (정적 또는 동적) 라이브러리에이 컴파일하거나 빌드 환경의 작동 방식을 따라 프로젝트에서 C 소스 코드를 함께 넣어.
관련 문제
- 1. C 프로그램에서 C++ 라이브러리를 사용할 수 있습니까?
- 2. C++ .NET에서 익명 함수를 사용할 수 있습니까?
- 3. C 함수를 Cocoa의 셀렉터로 사용할 수 있습니까?
- 4. C 프로그램에서 cstdio를 사용할 수 있습니까?
- 5. C# 프로그램에서 C++ .lib 파일을 사용할 수 있습니까?
- 6. C#에서 일부 함수를 사용할 수 없습니다!
- 7. Palm OS 응용 프로그램에서 표준 C 라이브러리를 사용할 수 있습니까?
- 8. COBOL 프로그램에서 C (노출 된) 함수를 호출합니다.
- 9. C# : 표현식이나 함수를 사전의 키로 사용할 수 있습니까?
- 10. 부스트 기능으로 C++ 익명 함수를 사용할 수 있습니까?
- 11. 어떻게 PHP에서 C modf 함수를 사용할 수 있습니까?
- 12. if 문에서 #defined 값을 사용할 수 있습니까 (C 프로그램에서)?
- 13. 크롬 확장 프로그램에서 C++을 사용할 수 있습니까?
- 14. C# 응용 프로그램에서 다른 소프트웨어 DLL을 어떻게 사용할 수 있습니까?
- 15. VS2008/ASP.NET 3.5 응용 프로그램에서 C# 4.0을 사용할 수 있습니까?
- 16. ANSI C 프로그램에서 DOS 명령을 사용할 수 있습니까?
- 17. C 프로그램에서 C++ 함수 호출
- 18. C# 및 C++ 라이브러리
- 19. 누군가이 C 함수를 설명 할 수 있습니까?
- 20. 어떻게하면 모든 것을 사용할 수 있습니까? C++
- 21. C++ 응용 프로그램에서 lzo 라이브러리 사용
- 22. C/C++ 라이브러리 섞기
- 23. c 인터페이스가있는 C++ 라이브러리
- 24. C 프로그램에서 odf 파일을 작성하는 라이브러리
- 25. C/C++ PLSA 라이브러리
- 26. C# 라이브러리 사용 C#
- 27. C#에서 C++ 함수를 어떻게 호출 할 수 있습니까?
- 28. C 프로그램에서 char 함수를 반환하는 방법?
- 29. .Net - .Net으로 작성된 클래스 라이브러리 (dll)를 C 또는 C++로 작성된 응용 프로그램에서 사용할 수 있습니까?
- 30. 리눅스 서버에서 PHP로 C 라이브러리의 함수를 호출 할 수 있습니까?
std :: find가 작동하지만 C main() 함수가있는 프로그램에서 C++ 런타임이 제대로 초기화되었다고 보장 할 수 없습니다. –
@Bo : 사실이에요. 특히 iostream은 작동하지 않습니다. 물론,'main'을 C++ 파일에 넣기가 쉽습니다. – Potatoswatter