www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - main return value, struct padding

reply bearophile <bearophileHUGS lycos.com> writes:
I post this here, but if later I see it fit I may post something in the main D
group too.

D allows to have the main() function of type void too. In such case I'd like
the program return 0 by default. If people agrees, this can become a feature
request.

A question: when D automatically adds some padding to a struct, is such unused
space guaranteed to be initialized to a default constant value, like zero?

Bye,
bearophile
Jan 20 2009
next sibling parent reply Bill Baxter <wbaxter gmail.com> writes:
On Tue, Jan 20, 2009 at 11:15 PM, bearophile <bearophileHUGS lycos.com> wrote:
 I post this here, but if later I see it fit I may post something in the main D
group too.

 D allows to have the main() function of type void too. In such case I'd like
the program return 0 by default. If people agrees, this can become a feature
request.
What does it return now? I always assumed returned zero for void main. --bb
Jan 20 2009
parent reply bearophile <bearophileHUGS lycos.com> writes:
Bill Baxter:

 What does it return now?
A random int, I presume.
I always assumed returned zero for void main.<
Me too. Bye, bearophile
Jan 20 2009
parent "Jarrett Billingsley" <jarrett.billingsley gmail.com> writes:
On Tue, Jan 20, 2009 at 10:25 AM, bearophile <bearophileHUGS lycos.com> wrote:
 Bill Baxter:

 What does it return now?
A random int, I presume.
I always assumed returned zero for void main.<
Me too.
I've only ever seen void mains return 0. I think they used to return random ints but that was fixed long ago. Maybe it's different on Linux?
Jan 20 2009
prev sibling parent reply "Steven Schveighoffer" <schveiguy yahoo.com> writes:
"bearophile" wrote
I post this here, but if later I see it fit I may post something in the 
main D group too.

 D allows to have the main() function of type void too. In such case I'd 
 like the program return 0 by default. If people agrees, this can become a 
 feature request.
A test: [steves localhost testing]$ cat testmainreturn.d void main() { return 1; } [steves localhost testing]$ cat testmainreturn2.d void main() { } [steves localhost testing]$ dmd testmainreturn.d [steves localhost testing]$ dmd testmainreturn2.d [steves localhost testing]$ ./testmainreturn [steves localhost testing]$ echo $? 1 [steves localhost testing]$ ./testmainreturn2 [steves localhost testing]$ echo $? 0 [steves localhost testing]$ dmd | grep "Digital Mars D" Digital Mars D Compiler v1.038 [steves localhost testing]$ disassembly: [steves localhost testing]$ obj2asm testmainreturn.o ... _Dmain: push EBP mov EBP,ESP mov EAX,1 pop EBP ret .text._Dmain ends ... [steves localhost testing]$ obj2asm testmainreturn2.o ... _Dmain: push EBP mov EBP,ESP xor EAX,EAX pop EBP ret .text._Dmain ends ... So it appears it returns 0 unless you return something else (!) -Steve
Jan 20 2009
parent reply "Jarrett Billingsley" <jarrett.billingsley gmail.com> writes:
On Tue, Jan 20, 2009 at 12:21 PM, Steven Schveighoffer
<schveiguy yahoo.com> wrote:
 So it appears it returns 0 unless you return something else (!)
Ha!
Jan 20 2009
parent Denis Koroskin <2korden+dmd gmail.com> writes:
Jarrett Billingsley Wrote:

 On Tue, Jan 20, 2009 at 12:21 PM, Steven Schveighoffer
 <schveiguy yahoo.com> wrote:
 So it appears it returns 0 unless you return something else (!)
Ha!
Yes (but not always), even though specs clearly say that void functions evaluate return values and discard them. IIRC, this one returns 0: void main() { return new Object(); } while this one returns an object address: void foo() { return new Object(); } void main() { return foo(); }
Jan 20 2009