🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.std.c
Article #4690

Re: atexit() and return from main()

#4690
From: Stephen Baynes
Date: Tue, 23 Jan 1996 08:43
48 lines
3044 bytes
Tanmoy Bhattacharya (tanmoy@qcd.lanl.gov) wrote:
: --text follows this line--
: In article <DLKrx7.6p6@ukpsshp1.serigate.philips.nl>
: baynes@ukpsshp1.serigate.philips.nl (Stephen Baynes) writes: 
: <snip>
:    <snip>
:    :    main() calls setjmp() and then calls exit().  An atexit() function
:    :    calls longjmp() and returns to main().  This repeats (or does it?)

:    : Neither of these is permitted in any sense that I understand!
:    : 7.10.4.3: If more than one call to the exit function is executed by
:    : a program, the behaviour is undefined. No `permission by omission'
:    : that I can see.

:    In this example what happens if no second call to exit is been made (after
:    longjumping back to main the program does not attempt to call exit again -
:    instead it keeps executing indefinately)?

: I don't understand the question: are you asking what happens if a
: program keeps executing indefinitely? Well, it just keeps executing
: indefinitely. After that infinite period, the rest of the exit
: processing happens and a return status is indicated to the rts.

The question I am asking is if:
    main() calls setjmp() and then calls exit().  An atexit() function
    calls longjmp() and returns to main().  main() then continues to
    execute other code. Is the execution of this code defined behaviour
    (so long as no attempt is made to exit again)?

[Note: There is a large class of programs that never exit at all (including 
embeded systems and some daemons). They either have the power turned off or are
signalled to death. These are usually accepted as having well defined 
behaviour (at least untill the point the power goes of). I agree it would
be perverse of such a program to make exactly one call to exit and then
abandon it by a long jump from an atexit function to main. One can also 
construct programs that do this longjump and terminate later by calling abort.
However I think it is reasonable to ask if it is defined what happens after the 
longjump in the example is made.]

A related question - does undefined behaviour invalidate (make undefined) all 
defined behaviour that has gone before? If so does this mean that any program 
that does not exit() or return from main have any defined behaviour?

--
Stephen Baynes                              baynes@mulsoc2.serigate.philips.nl
Philips Semiconductors Ltd
Southampton                                 My views are my own.
United Kingdom
Technical Details
Message-ID: <DLMLL6.A0H@ukpsshp1.serigate.philips.nl>
Path: arc1-ca.pugleaf.net!phcoms4.seri.philips.nl!panther!baynes
References: <4dhfja$j50@fg70.rz.uni-karlsruhe.de> <4diicg$i9e@lyra.csx.cam.ac.uk> <TANMOY.96Jan22084309@qcd.lanl.gov>

Show Full Headers
Complete Article Headers
Newsgroups: comp.std.c
Path: arc1-ca.pugleaf.net!phcoms4.seri.philips.nl!panther!baynes
From: baynes@ukpsshp1.serigate.philips.nl (Stephen Baynes)
Subject: Re: atexit() and return from main()
Sender: news@ukpsshp1.serigate.philips.nl (account for localnews)
Message-ID: <DLMLL6.A0H@ukpsshp1.serigate.philips.nl>
Date: Tue, 23 Jan 1996 08:43:54 GMT
References: <4dhfja$j50@fg70.rz.uni-karlsruhe.de> <4diicg$i9e@lyra.csx.cam.ac.uk> <TANMOY.96Jan22084309@qcd.lanl.gov>
Organization: Philips Semiconductors, Southampton, UK
X-Newsreader: TIN [version 1.2 PL2]