这是否可能?即用dmc编译.c文件,用dmd编译.d文件,然后将它们链接在一起,这样可以工作吗?我能够从C代码中调用D函数,共享全局变量等吗?谢谢。
是的,这是可能的。实际上,这是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;
}
请参阅与C语言接口获取更多信息。