Calling C functions

Jacob Carlborg doob at me.com
Mon Jun 29 17:50:03 UTC 2020


On Monday, 29 June 2020 at 16:34:33 UTC, Steven Schveighoffer 
wrote:

> Are you sure? On the ABI page [1] , it says "The extern (C) and 
> extern (D) calling convention matches the C calling convention 
> used by the supported C compiler on the host system."

In that case the documentation is wrong. Here's an example 
showing the differences:

$ cat foo.c
#include <stdio.h>

void foo(int a, int b)
{
     printf("a=%d b=%d\n", a, b);
}
$ clang -c foo.c
$ cat main.d
pragma(mangle, "foo") extern (D) void foo_extern_d(int, int);
pragma(mangle, "foo") extern (C) void foo_extern_c(int, int);

void main()
{
     foo_extern_d(1, 2);
     foo_extern_c(1, 2);
}
$ dmd main.d foo.o
$ ./main
a=2 b=1
a=1 b=2

This is on macOS.

--
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list