C's void func() vs. void func(void).

Mike Parker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jul 29 05:15:22 PDT 2016


On Friday, 29 July 2016 at 10:57:37 UTC, ciechowoj wrote:
> In C, a function `void func()` doesn't declare a function 
> without arguments, instead it declares a function that takes 
> unspecified number of arguments. The correct way to declare a 
> function that takes no arguments is to use the `void` keyword: 
> `void func(void)`.
>
> What is the correct way to refer to such a function (`void 
> func()`) from D bindings?
>
> If I assume that the unspecified number of arguments (for some 
> particular function) is equal to zero, is `extern (C) void 
> func()` a correct D binding to the both functions `void func()` 
> and `void func(void)` declared in C?
>
> Specifically, I'm concerned about calling convention issues.

Yes, this is correct as long as the calling convention is not 
stdcall or something else:

extern(C) void func();

If you're dealing with stdcall:

extern(Windows) void func();

And if it is a cross-platform library that is stdcall on Windows 
and cdecl elsewhere:

extern(C) void fun();


More information about the Digitalmars-d-learn mailing list