On 2012-07-18 11:41, Walter Bright wrote:

Variadic functions, in order to work in C, need at least one parameter
so that varargs can work.

   int foo();

declares a function with an unspecified parameter list, not a variadic
one. It is specified by a definition somewhere:

   int foo(a,b)
   int a;
   int b;
   { ... }

somewhere.

I think I understand now.

If Dstep encounters the first declaration form, your options are to:

1. reject it (a perfectly reasonable approach)

2. treat it as:

     int foo(void);

I suggest option 2, which is what C++ does.

Sounds reasonable. I will also provide a flag specifying how this should be handled.

I actually found library that uses this style of declaration. It's used in several places in libruby. For example:

void rb_define_virtual_variable(const char*,VALUE(*)(ANYARGS),void(*)(ANYARGS));

ANYARGS is defined as:

#ifdef __cplusplus
#define ANYARGS ...
#else
#define ANYARGS
#endif

Does that mean that this C++ declaration:

void foo (...);

Is the same as this C declaration?

void foo ();

I'm wondering if the intention is to cast these function pointers to their correct signature before calling them.

--
/Jacob Carlborg


Reply via email to