[gnu.g++.bug] exit

schmidt@glacier.ics.uci.edu (01/06/89)

Hi,

  I came across an interesting C++ fact the other day.  While I can
see why this behavior make sense, it seems like it should at least be
mentioned in any C++ language reference manual.  Here's an example:

----------------------------------------
class foo {
public:
   foo ( ) {
      printf ( "start\n" );
   }
   ~foo ( void ) {
      printf ( "finish\n" );
   }
};

main ( ) {
   foo bar; // prints "start"
   exit ( 0 );
   // doesn't print "finish", since exit() doesn't return!
   // replacing exit(0) with return 0 works.
}
----------------------------------------

Most C programmers are probably conditioned to use exit(), rather than
return, in the main() function.  While this doesn't make much
difference in C, it obviously make a *big* difference in C++, if
objects with destructors are defined in the main() function.  I don't
recall this being mentioned explicitly in the C++ reference manual.
Page 159 alludes to the differences with exit(), abort(), and
destructors for static objects.  Mention of this behavior probably
belongs go in the ``Differences with C'' section.

I hope this information saves people problems in the future.

Doug
--
schmidt@ics.uci.edu (ARPA) |   Per me si va nella citta' dolente.
office: (714) 856-4043     |   Per me si va nell'eterno dolore.
                           |   Per me si va tra la perduta gente.
                           |   Lasciate ogni speranza o voi ch'entrate.