가능합니까? dmc로 .c를 컴파일하고 dmd로 .d를 컴파일 한 다음 연결하면됩니다. C 코드에서 D 함수를 호출하거나 전역 변수를 공유 할 수 있습니까? 감사.동일한 프로그램에서 C 코드와 D 코드를 섞어 쓰시겠습니까?
7
A
답변
10
예 가능합니다. 사실 이것은 dmd의 주요 기능 중 하나입니다. C에서 D 함수를 호출하려면 해당 함수를 extern(C)
으로 지정하십시오.
// .c
#include <stdio.h>
extern int x;
void increaseX(void);
int main (void) {
printf("x = %d (should be 0)\n", x);
increaseX();
printf("x = %d (should be 1)\n", x);
return 0;
}
// .d
import std.c.stdio;
extern (C) {
shared int x; // Globals without 'shared' are thread-local in D2.
// You don't need shared in D1.
void increaseX() {
++ x;
printf("Called in D code\n"); // for some reason, writeln crashes on Mac OS X.
}
}
더 많은 정보를 원하시면
Interfacing to C를 참조하십시오.
1
위의 대답은 내가 아는 한 잘못되었습니다. D 함수를 사용하기 전에 D 주 루틴을 호출해야하기 때문에. 이것은 D를 "초기화"하는 데 필요합니다. 가비지 수집. 이를 해결하기 위해 D의 주 루틴에 의해 프로그램을 입력하거나 C의 D 메인 루틴을 호출 할 수 있습니다 (그러나이 방법이 어떻게 작동하는지 정확히 알지 못합니다)
+1
다음은 2007 년 토론 내용입니다. http://www.digitalmars.com/d/archives/digitalmars/D/learn/Calling_D_from_C_-_What_s_the_present_status_6003.html –
관련 문제
- 1. 이 C++ 코드와 동일한 C#
- 2. 사양에 C# 코드와 데이터베이스 코드를 결합하십시오.
- 3. Java 코드를 C# 코드와 연결하는 방법은 무엇입니까?
- 4. C++ 2-D 배열 최적화
- 5. NumPy 문자 배열에 데이터 문자열을 쓰시겠습니까?
- 6. 동일한 응용 프로그램에서 C++과 C# 사이의 비동기 통신
- 7. onclick에서 C# 코드와 JavaScript 코드를 결합하는 방법은 무엇입니까?
- 8. C 함수의 D 콜백
- 9. VB.net 문자 코드와 동일한 PHP 코드
- 10. 코드와 동일한 페이지에서 +1 데이터를 가져 오기
- 11. menubar의 코드를 페이지의 코드와 결합하는 방법은 무엇입니까?
- 12. 테스트 코드를 테스트하는 코드와 관련하여 어디에 넣어야합니까?
- 13. 응용 프로그램에서 동일한 GUID의 영향
- 14. C# 프로그램에서 뮤텍스 코드를 사용하는 방법은 무엇입니까?
- 15. 파이썬 코드를 C++ 응용 프로그램에서 사용하려면 어떻게해야합니까?
- 16. C 프로그램에서 Perl 코드를 컴파일하려면 어떻게해야합니까?
- 17. RSS 피드 기본 사항 - 반복적으로 동일한 파일을 덮어 쓰시겠습니까?
- 18. 누구나 JavaFX와 JRuby를 섞어 보았습니까?
- 19. TDD와 RAII를 섞어 쓰는 방법
- 20. 존재하는 경우 항상 덮어 쓰시겠습니까?
- 21. VB.net 코드와 C# 코드의 혼합
- 22. D에서 D API 구현 D
- 23. Zend_Navigation은 배열로 덮어 쓰시겠습니까?
- 24. XmlTextWriter로 덮어 쓰시겠습니까?
- 25. 이진 파일에 편지를 쓰시겠습니까?
- 26. C# 코드와 C++ 코드 간의 개체 공유
- 27. C# 코드를 사용하여 MVC 3.0 응용 프로그램에서 작업하는 C#
- 28. C++ 및 C# 코드와 C++/cli 브리지 연결
- 29. BizTalk 메시지를 서로 덮어 쓰시겠습니까?
- 30. 관리 코드와 비 관리 코드를 통합/혼합하는 방법
+1 정확하게 올바른 페이지로 이동하십시오. C 코드와 D 코드는 별도의 파일에 있어야합니다. (분명히 들릴지 모르겠지만 명시 적으로 명시해야합니다.) –