return in void functions

Georg Wrede georg.wrede at iki.fi
Sun Mar 8 06:38:33 PDT 2009


Stewart Gordon wrote:
> Walter Bright wrote:
>> BCS wrote:
>>> IIRC D allows "return exp;" in a void function because it avoids 
>>> special cases in template code.
>>>
>>> ReturnTypeOf!(AFn, T) fn(T)(T t)
>>> {
>>>    return AFn(t,t); // AFn might return void
>>> }
>>
>> Yes, that's exactly why.
> 
> Why it allows you to return an int from a void-returning function???

C does that, too.

void foo()
{
     return 23;
}

int  main()
{
     foo();
}

Running the program gives random values as the exit status.
Changing void to int returns always 23.

(Actually I would have thought that it'd give 23 in both cases.
But I guess the assignment of 23 into the return register doesn't
get compiled when void is used.)

----

Anyway, I don't think this is such a big deal. Fixing this may be a lot 
of work, and I haven't heard anyone complain about it, in C or D, before.

It's a blemish, but one we can live with.



More information about the Digitalmars-d mailing list