在同一程序中混合使用C和D代码?

时间:2010-08-22 07:39:52

标签: c d

有可能吗?即使用dmc编译.c和使用dmd编译.d然后将它们链接在一起,这会有效吗?我能从C代码调用D函数,共享全局变量等吗?感谢。

2 个答案:

答案 0 :(得分:10)

是的,这是可能的。实际上这是dmd的主要特征之一。要从C调用D函数,只需创建该函数extern(C),例如

// .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;
}

有关详细信息,请参阅Interfacing to C

答案 1 :(得分:2)

据我所知,上述答案是错误的。 因为在使用任何D函数之前必须调用D主例程。 这对于“初始化”D,f.e是必要的。它的垃圾收集。 要解决这个问题,你只需要通过D中的主程序输入程序,或者你可以用C语言调用D主程序。(但我不确切知道这个程序是如何工作的)