Có thể không? tức là biên dịch .c với dmc và .d với dmd và sau đó liên kết chúng lại với nhau, điều này có hiệu quả không? Liệu tôi có thể gọi các hàm D từ mã C, chia sẻ các hình cầu ...? Cảm ơn.Trộn mã C và D trong cùng một chương trình?
Trả lời
Có thể thực hiện được. Trong thực tế, đây là một trong những tính năng chính của dmd. Để gọi hàm D từ C, chỉ cần thực hiện chức năng đó extern(C)
, ví dụ:
// .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.
}
}
// .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;
}
Xem Interfacing to C để biết thêm.
Câu trả lời ở trên không đúng như tôi biết. Bởi vì thói quen chính của D phải được gọi trước khi bạn sử dụng bất kỳ chức năng D nào. Điều này là cần thiết để "khởi tạo" D, f.e. bộ sưu tập rác của nó. Để giải quyết điều đó, bạn chỉ có thể làm cho chương trình được nhập vào bằng một thói quen chính trong D hoặc bằng cách nào đó bạn có thể gọi thường trình D chính từ C. (Nhưng tôi không biết chính xác cách này hoạt động)
Đây là cuộc thảo luận từ năm 2007 về điều đó: http://www.digitalmars.com/d/archives/digitalmars/D/learn/Calling_D_from_C_-_What_s_the_present_status_6003.html –
- 1. Trộn cout và wcout trong cùng một chương trình
- 2. bị xáo trộn Mã trong C
- 3. Cùng một mã chương trình với cùng một trình biên dịch dẫn đến các tệp nhị phân khác nhau
- 4. Trộn Objective-C và C++
- 5. Cách liên kết tới Thư viện D trong chương trình D
- 6. Qt - trộn Qt và std :: C++ loại
- 7. Trộn các tệp C và Assembly
- 8. Gọi C chức năng/chương trình con trong mã Fortran
- 9. Trộn mã VB.net với C# code
- 10. Nhận đầu ra của một chương trình C thành một biến trong một chương trình C khác
- 11. Ping từ một chương trình C/C++
- 12. Gọi mã d từ một trình bao tương tác
- 13. Trộn Mã C# và mã C++ được nhân lên trên Windows với Visual Studio
- 14. Trộn C và C++ với CMAKE
- 15. Thực hiện chương trình từ bên trong chương trình C
- 16. Demo, mẫu và mã chứng minh khái niệm trong D
- 17. Thực hiện một chương trình khác trong C++
- 18. Trộn cờ RTTI trong C++
- 19. Gọi phương thức C# trong một chương trình Java
- 20. Bảng phân vùng in - Chương trình C
- 21. D Quy trình phát triển
- 22. Biên dịch và chạy chương trình C trong Emacs
- 23. Khởi động một chương trình từ ASP.NET C#
- 24. Khi nhiều chương trình java chạy trên cùng một máy
- 25. Xáo trộn thẻ trong C#
- 26. C chương trình: __start
- 27. Gọi C++ (C) từ ngôn ngữ D
- 28. Bash: Chạy cùng một chương trình trên nhiều lõi
- 29. sử dụng chương trình phụ trợ tương tác và không tương tác trong một chương trình
- 30. D Quá trình xây dựng
+1 cho liên kết chính xác đến đúng trang. Lưu ý rằng mã C và mã D phải nằm trong các tệp riêng biệt. (Nghe rõ ràng, nhưng vẫn nên được tuyên bố rõ ràng.) –