extern(C) function declarations and extra keywords.

Jakob Ovrum jakobovrum at gmail.com
Sun Dec 29 08:09:35 PST 2013


On Sunday, 29 December 2013 at 14:50:52 UTC, H. S. Teoh wrote:
> Yes, since C code will not throw D exceptions (C doesn't know 
> anything
> about D exceptions). Unless you pass in a function pointer to a 
> D
> function that does throw an exception... but that case doesn't 
> work for
> other reasons, so it generally shouldn't be done. So, barring 
> that, all
> C code is automatically nothrow.

Some C libraries are designed to support long-jumping or 
throwing[1] out of some of their callbacks (when they are, it 
will be explicitly stated in the documentation). These callbacks 
need not necessarily be marked nothrow. Of course, the C function 
that calls the callback should have the same throwness as the 
callback - if one is marked as nothrow, both should be, and vice 
versa.

Interestingly, D programs that catch non-Exception's and try to 
return to a normal path of code execution will be extra prone to 
spectacular failure if they use C libraries with callbacks that 
don't support long-jumping out of them, which is most...

[1] Whether stack-unwinding will work is dependent on the 
exception mechanism and sometimes compilation flags etc.


More information about the Digitalmars-d-learn mailing list