Basics of calling C from D

John Colvin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 11 07:02:07 PDT 2014


On Wednesday, 11 June 2014 at 13:52:09 UTC, belkin wrote:
> Example: I have this C function that is compiled into a library
>
> //File: factorial.h
> int factorial(int n);
>
>
> //File: factorial.c
> #include "factorial.h"
>
> int factorial(int n)
> {
>     if(n!=1)
>      return n*factorial(n-1);
> }
>
> Question: How do I use it from D?

//File: blah.d

extern(C) int factorial(int n); //coincidentally identical to the 
C declaration.

void main()
{
     assert(factorial(3) == 6);
}


$ gcc -c factorial.c -ofactorial.o
$ dmd blah.d factorial.o
$ ./blah

or

$ gcc -c factorial.c -ofactorial.o
$ ar rcs libfactorial.a factorial.o
$ dmd blah.d -L-lfactorial
$ ./blah



Basically, you just translate the header files from C to D, then 
link to the C implementation. See 
http://code.dlang.org/packages/dstep for automatic translation of 
headers.


More information about the Digitalmars-d-learn mailing list