Смешивание кода C и D в одной программе?

Возможно ли это? т.е. скомпилируйте .c с dmc и .d с dmd, а затем свяжите их вместе, будет ли это работать? Смогу ли я вызывать функции D из кода C, поделиться глобальными и т. д.? Спасибо.

7
задан szx 22 August 2010 в 07:39
поделиться

1 ответ

Да, это возможно. Фактически это одна из главных особенностей dmd. Чтобы вызвать функцию D из C, просто сделайте эту функцию 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 для получения дополнительной информации.

10
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: