Est-ce possible? c'est-à-dire compiler .c avec dmc et .d avec dmd et ensuite les lier ensemble, cela fonctionnera-t-il? Pourrai-je appeler les fonctions D du code C, partager des globales, etc.? Merci.Mélanger les codes C et D dans le même programme?
Répondre
Oui, c'est possible. En fait, c'est l'une des principales caractéristiques de DMD. Pour appeler une fonction D à partir de C, faites simplement cette fonction extern(C)
, par ex.
// .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;
}
Voir Interfacing to C pour plus d'informations.
La réponse ci-dessus est fausse autant que je sache. Parce que la routine principale D doit être appelée avant d'utiliser des fonctions D. Ceci est nécessaire pour "initialiser" D, f.e. sa collecte des ordures. Pour résoudre cela, vous pouvez simplement faire entrer le programme par une routine principale dans D ou vous pouvez appeler la routine principale D de C. (Mais je ne sais pas exactement comment cela fonctionne)
Voici une discussion de 2007 à ce sujet: http://www.digitalmars.com/d/archives/digitalmars/D/learn/Calling_D_from_C_-_What_s_the_present_status_6003.html –
- 1. en c et le programme c
- 2. Problème de lecture et d'écriture du même fichier dans le même programme ... C++
- 3. Mélanger jsp et jsf
- 4. Puis-je combiner les questions d'expressions régulières ([\\ d] * $) et ([\\ d] *) c $
- 5. Confusion dans le programme C
- 6. Partage d'objets entre les codes C# et C++
- 7. Programme simple ajoutant "D" à la sortie
- 8. Différence entre les codes d'état et les codes d'erreur
- 9. Mélanger C++ et Objective-C (problème d'Automake suspecté)
- 10. Comment mélanger Qt, C++ et Obj-C/Cocoa
- 11. Comment mélanger php et C++ pour l'authentification de l'utilisateur?
- 12. NAnt, sqlcmd.exe et les codes d'erreur
- 13. QT et C#: Puis-je les mélanger pour le développement mobile?
- 14. SharpDevelop - mélanger C# et VB.NET dans un projet possible?
- 15. Dans VIM, comment puis-je mélanger les règles de syntaxe/ident de jinja et javascript dans le même fichier?
- 16. WPF MenuItem: Mélanger les éléments databound et le contenu statique
- 17. Comment pouvons-nous trouver le chemin jdk dans les lecteurs système (comme C, D etc) en utilisant le programme Java?
- 18. Mélanger QooXDoo et jqgrid
- 19. Pouvez-vous mélanger libre et constructeur en C++?
- 20. redirect_to et: contrôleur,: les actions se mélanger dans Rails
- 21. fputcsv et les codes de nouvelle ligne
- 22. C++ dll dans le programme C
- 23. Comment démarrer un programme C# à partir d'un autre programme C# dans la même carte?
- 24. Est-il possible d'écrire les 2 codes html dans le même fichier html?
- 25. le stockage et les données programme de chargement, C# WPF
- 26. Empêchez emacs de mélanger les onglets et les espaces?
- 27. réutiliser les codes javascript (réduire les codes en double)
- 28. insérer l'image dans les codes du jeu d'échecs C#
- 29. Champs et codes dans le journal FTP Apache
- 30. Comment mélanger les indicateurs dans XSD
+1 pour le lien exactement à la bonne page. Notez que le code C et le code D doivent être dans des fichiers séparés. (Cela semble évident, mais doit toujours être déclaré explicitement.) –