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

Reply via email to