James Dennett wrote:
> On Thu, Mar 12, 2009 at 4:56 PM, Robert Dewar <de...@adacore.com> wrote:
>> Nathan Ridge wrote:
>>
>>> Why does gcc not give an error about this?
>>> If I compile with "-Wall", it will give a WARNING saying
>>> "control reaches end of non-void function".
>>>  However, shouldn't it be an ERROR to return nothing
>>> from a function that's supposed to return something?
>>> Does this not result in undefined behaviour? Why goes gcc allow it?
>> Because the standard does not make this an error, you can't tell
>> if anyone needs a result, perhaps function is always called in
>> a void environment.
>>
>> A warning is all you can get, always pay attention to warnings!
> 
> The standard does make it an error, in that if such a function
> (meaning a function that unconditionally falls off the end, when
> declared to return a value) is called _at all_ then undefined behavior
> results.  

  No, unless I have missed something..  Not if it is merely called: only if
the return value is *used* (n1256 #6.9.1.12).  Freestanding implementations
may use this to effectively allow a void main().

> More general cases can't be established at compile time, of
> course.

  Did you test with -pedantic and/or -std= flags in effect?  This usage was
common in K'n'R days, where falling off the end of a function without a return
statement generally returned the result of the most recently-computed
expression.  It may be giving only a warning as a gnu extension for back-compat.

    cheers,
      DaveK



Reply via email to