¿Es posible? es decir, compilar .c con dmc y .d con dmd y luego vincularlos, ¿funcionará? ¿Podré llamar a las funciones D desde el código C, compartir globales, etc.? Gracias.mezcla de códigos C y D en el mismo programa?
Respuesta
Sí es posible. De hecho, esta es una de las características principales de dmd. Para llamar a una función D desde C, simplemente realice esa función extern(C)
, p.
// .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;
}
Ver Interfacing to C para obtener más información.
La respuesta anterior es incorrecta hasta donde yo sé. Porque se debe llamar a la rutina principal D antes de usar cualquier función D. Esto es necesario para "inicializar" D, f.e. su recolección de basura. Para resolver eso, simplemente puede hacer que el programa sea ingresado por una rutina principal en D o de alguna manera puede llamar a la rutina principal D desde C. (Pero no sé exactamente cómo funciona)
Aquí hay una discusión de 2007 sobre eso: http://www.digitalmars.com/d/archives/digitalmars/D/learn/Calling_D_from_C_-_What_s_the_present_status_6003.html –
- 1. Mezcla cout y wcout mismo programa en
- 2. Errores de mezcla y excepciones en C#
- 3. Mezcla C y objetivo-C
- 4. Mezcla de Haskell y C++
- 5. Mezcla de Objective-C y C++
- 6. Mezcla C y archivos de ensamblaje
- 7. Cómo vincular bibliotecas D en un programa D
- 8. Mezcla C y C++ con CMAKE
- 9. getch y códigos de flecha
- 10. Llamar C++ (C) desde el lenguaje D
- 11. Mezcla de archivos y bucles
- 12. C printf usando% d y% f
- 13. Mezcla de Qt y Boost
- 14. Y-combinator en D?
- 15. C89, Mezcla declaraciones de variables y Código
- 16. Mezcla C# con Objective-C
- 17. ¿Cuál es la diferencia entre% d y% * d en el lenguaje c?
- 18. Mezcla de proyectos C# y VB.NET = roto "Ir a definición"
- 19. error de compilación en el proyecto de C++ con códigos C y C++
- 20. mezcla MarshalByRefObject y serializables
- 21. mezcla de cuarzo y OpenGL?
- 22. Resultado inesperado en el programa C
- 23. mezcla súper clásicos y llamadas en Python
- 24. Django - Mezcla ListView y CreateView
- 25. ¿Cómo puedo obtener y utilizar el archivo de encabezado <graphics.h> en mi programa C++?
- 26. códigos fputcsv y newline
- 27. Mezcla de color en Android
- 28. Diferencia entre: d [count] y d [count]
- 29. Traducir códigos de error COM en C#
- 30. diferencias entre "d = dict()" y "d = {}"
+1 para el enlace exactamente la página correcta Tenga en cuenta que el código C y el código D deben estar en archivos separados. (Parece obvio, pero aún así debe mencionarse explícitamente). –