On Thu, 19 Jul 2012 08:33:12 +0100, Paulo Pinto <pj...@progtools.org>
wrote:
On Wednesday, 18 July 2012 at 20:13:10 UTC, Walter Bright wrote:
On 7/18/2012 11:47 AM, Jacob Carlborg wrote:
On 2012-07-18 20:43, Walter Bright wrote:
On 7/18/2012 4:59 AM, Jacob Carlborg wrote:
Does that mean that this C++ declaration:
void foo (...);
Not allowed in C or C++.
When compiling in C++ mode, both Clang and GCC accepts this.
How would you get the arguments inside foo?
As described here,
http://pubs.opengroup.org/onlinepubs/7908799/xsh/varargs.h.html
That /requires/ an argument in the definition (AFAIKS), e.g.
execl(va_alist) <- va_alist is the argument name
va_dcl <- this is #define va_dcl va_list va_alist;
{
}
so, it's no different to any other old-style function, e.g.
foo(a)
int a;
{
}
Now.. the declaration may be a different story. These would be valid
declarations for the above:
void execl(); <- no parameters necessary in a declaration
void foo(); <- no parameters necessary in a declaration
It may be that GCC allows a declaration of:
void execl(...);
But I wasn't ware that was valid ANSI C, perhaps it's a GCC/clang
feature? Can anyone find docs on it?
If we /assume/ the above declaration always refers to a function with a
definition of:
execl(va_alist)
va_dcl
{
}
Then we assume the first argument is /always/ going to be a 32 bit value
(int, or 32 bit pointer) then we could speculatively convert to this D
extern (C) void execl(int first, ...);
But, if either assumption is false this would probably crash when used.
R
--
Using Opera's revolutionary email client: http://www.opera.com/mail/