void main returning int - why compiles?
Matthias Pleh
matthias at net.at
Sat Jan 1 01:10:39 PST 2011
On 2011-01-01 09:32, Jonathan M Davis wrote:
> On Friday 31 December 2010 23:37:17 Daren Scot Wilson wrote:
>> I'm wondering why the following compiles. I'm using LDC. Perhaps it's a
>> bug, or there's some subtlety about D. I have deliberately, out of a
>> combination of idleness and desire for mischief, have main() declared as
>> returning void, but with a return statement giving an integer.
>>
>> If the first "half evil" return statement is uncommented, the corruption is
>> noticed by the compiler and it writes an error.
>>
>> As shown, the "total evil" return statement gets a value from subroutine
>> foo(). Being somehow so perfect in its evilness, this passes through the
>> compiler without a burp. The resulting executable returns zero (or my bash
>> shell defaults to zero when receiving nothing.)
>>
>> When I get religion and like good boy declare main() as returing int, it
>> compiles in perfectly. When executed, the program returns either number
>> according to which return statement is uncommented.
>>
>>
>>
>>
>> int foo(int x) {
>> return x;
>> }
>>
>> void main() {
>> // return 333; /* half evil */
>> return foo(666); /* total evil */
>> }
>
> I don't know what LDC's current state is in terms of being up-to-date with the
> latest D. However, it is _not_ legal D to return a value from a void function.
> So, this is definitely a bug in LDC.
>
> - Jonathan M Davis
It's the same with dmd v2.051 on GNU/Linux
More information about the Digitalmars-d-learn
mailing list