Re: why are missing return statements from non-void functions not a
On 30 Jul., 16:04, Goran Pusic <gor...@cse-semaphore.com> wrote:
On Jul 29, 9:01 pm, Daniel Kr?gler <daniel.krueg...@googlemail.com>
wrote:
On 29 Jul., 17:05, Goran Pusic <gor...@cse-semaphore.com> wrote:
Also, note that at the call site, you are not required to use return
value, so ultimately e.g. this:
int f(int g)
{
if (g==5)
return 7;
// and else?
}
int main(int, const char*[])
{
int i = f(5);
f(6); // don't care about result, nor is there one, too!
}
will work.
Sorry, this is nonsense. The above code produces undefined
behavior, see 6.6.3/2:
"Flowing off the end of a function is equivalent to a return with
no value; this results in undefined behavior in a value-returning
function."
Whoops... So this only worked on implementations I tried (blushes).
BTW, is the situation the same for C language?
It seems that C does support this situation, because this deviation of
specification is mentioned in the list of compatibility differences
between C and C++:
Change: It is now invalid to return (explicitly or implicitly) from a
function
which is declared to return a value without actually returning a value
Rationale: The caller and callee may assume fairly elaborate return-
value mechanisms for the return of class objects. If some flow paths
execute a return without specifying any value, the implementation
must embody many more complications. Besides, promising to
return a value of a given type, and then not returning such a value,
has always been recognized to be a questionable practice,
tolerated only because very-old C had no distinction between void
functions and int functions.
void strcpy(char* dest, const char* src)
{
while (*dest++ = *src++);
}
into their C book, but he who wrote this today would probably be
called code red on in a code review. ;-)
I don't see anything wrong with that code.
Syntactically and functionally, me neither ;-). But my point was, to
be explicit, this is an exercise in term evaluation and operator
precedence that's IMO better left out of production code.
I meant my question serious, because I don't consider the
code-style used above as in any way harmful.
But I don't want to start a code-style war here, so I won't
participate in follow-ups of this particular point ;-)
HTH & Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]