--- Comment #9 from Steven Schveighoffer <> 2012-04-16 
05:43:17 PDT ---
(In reply to comment #6)
> > I'm not exactly talking about binding or calling convention, I'm more 
> > talking
> > about types.  To me, the two are orthogonal.
> Whereas I would argue that since you're declaring a C function, it should be a
> _C_ function and therefore not include features which C doesn't have. The only
> reason that I think that permitting pure and nothrow on C functions makes any
> sense is out of pure necessity.

No.  An extern(C) function does not mean it's a C function.  It just means it
has C linkage.  See here:

extern(C) has nothing to do with parameters, only calling conventions.

What would you expect here?

extern(C) void foo(long);

to accept 32-bit or 64-bit integer?  The answer is, 64 bit.  The confusion that
would abound if you had to use C's types and keywords whenever declaring an
extern(C) function would be not worth the trouble.

The one exception, as Don pointed out, is variadic arguments, but that is
covered here:

> > extern(C) int pipe(ref int[2] fds);
> I would expect this to simply be
> extern(C) int pipe(int* fds);
> because what C does is pass a pointer, not a fixed-size array.

This does not say anything about the size.  Even though it's a 'hint' in C,
it's enforceable in D.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to