Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Beenden eines Programm: Ablauf

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.08.2007, 23:47 Uhr
~tobb87
Gast


Hi,

was wird zuerst aufgerufen, wenn ein Programm beendet wird:
- die registrierten atexit-Funktionen
- Destruktoren von globalen und in main definierten Objekten
?

Gibt es hinsichtlich der Frage einen Unterschied wenn ich mit "Programm beenden" das

Code:
int main()
{
    //...
    return 0; //Programm wird beendet
}


meine oder das
[code]
int main()
{
//...
exit(); //Programm wird beendet
//..
}
[code]
meine?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.08.2007, 00:13 Uhr
0xdeadbeef
Gott
(Operator)


Zuerst in main definierte Objekte, dann der von atexit aufgerufene Kram. Das beinhaltet die globalen Objekte.

Aber du solltest exit in C++ nicht benutzen, dann werden nämlich die in lokal definierten Objekte nicht zerstört.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.08.2007, 01:37 Uhr
~tobb87
Gast


Was meinst du mit "Das beinhaltet die globalen Objekte"?

Muss man damit rechnen, dass globale Objekte in einer atexit-Funktion nicht mehr verwendbar sind, weil ihr Desktrutor schon aufgerufen wurde?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.08.2007, 23:08 Uhr
~tobb87
Gast


no answer?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.08.2007, 00:24 Uhr
0xdeadbeef
Gott
(Operator)


Ich musste das, zugegeben, erst im Standard nachschlagen - ich hab atexit in C++ nie benutzt und halte das für einen schlechten Mechanismus. Was der Standard sagt ist jedenfalls

Zitat von C++-Standard Sektion 3.6.3.3:

If a function is registered with atexit (see <csdtlib>, 18.3) then following the call to exit, any objects with static storage duration initialized prior to the registration of that function shall not be destroyed until the registered function is called from the termination process and has completed. For an object with static storage duration constructed after a function is registered with atexit, then following the call to exit, the registered function is not called until the execution of the object's destructor has completed. If atexit is called during the construction of an object, the complete object to which it belongs shall be destroyed before the registered function is called.


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.08.2007, 19:49 Uhr
Hans
Library Walker
(Operator)


Hi,

ich hab den oben von Beefy aus dem Standard zitierten Text mal durch die Übersetzungsfunktion von Google geschickt. Das Ergebniss sieht so aus:


Zitat:
Wenn eine Funktion mit dem atexit (<csdtlib>, 18.3 sehen), dem Anruf zum Ausgang dann folgend registriert wird, werden keine Gegenstände mit statischer Speicherdauer initialisiert vor der Ausrichtung dieser Funktion nicht zerstört, bis die eingetragene Funktion vom Endpunktprozeß benannt ist und durchgeführt hat. Einen Gegenstand mit der statischen konstruierten Speicherdauer, nachdem eine Funktion mit atexit registriert ist, dem Anruf zum Ausgang dann folgend, wird die eingetragene Funktion nicht verlangt, bis die Durchführung des Verbrennungsofens des Gegenstandes durchgeführt hat. Wenn atexit während des Aufbaus eines Gegenstandes benannt wird, wird der komplette Gegenstand, dem er gehört, zerstört, bevor die eingetragene Funktion benannt wird.


Sehr interessant ist gegen Ende "wird die eingetragene Funktion nicht verlangt, bis die Durchführung des Verbrennungsofens des Gegenstandes durchgeführt hat."

Alles in allem kann ich dazu nur sagen: Genial

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 18.08.2007 um 19:50 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.08.2007, 16:57 Uhr
~tobb87
Gast


Ganz ehrlich... ich verstehe den englischen Text nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.08.2007, 21:17 Uhr
Hans
Library Walker
(Operator)


Hi,

okay, 100%ig (!) versteh ich ihn auch nicht, aber wenn ich ihn genau verstehen will, dann nehme ich mir ein ordentliches Wörterbuch, und schlage die Begriffe nach, die mir nicht klar sind. Dazu braucht man meisst nicht mal ein Fachwörterbuch, es genügt ein umfangreicheres Standardwörterbuch, also eines mit etwa 100.000 Stichwörtern. Zur Erleichterung der Übersetzungsarbeit kann man sich den Text auch vorher ausdrucken.
Aber übrigens: Die automatische Übersetzung ist auch nicht gerade einfach zu verstehen, und das der Verbrennungsofen da völlig fehl am Platze ist, sollte aber auch so klar sein, oder nicht? Oder weist Du, wie man "einen Verbrennungsofen durchführt"?

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 20.08.2007 um 21:24 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.08.2007, 21:45 Uhr
~tobb87
Gast


Ich habe nicht geschrieben, dass ich kein Wörterbuch benutzt habe. Woher nimmst du das?
"Any" mit "keine" zu übersetzen, wie es google macht und leo auch, kann auch nach hinten los gehen... deshalb nützen Wörterbücher nicht immer sehr viel, wenn man die Sprache nicht gut beherrscht.

Ich bitte daher nur nochmal kurz um die Antwort zu Frage was zuerst aufgerufen wird:
- Die Destruktoren globaler und in main lokaler Objekte
- oder die registrierten atexit funktionen.

Ich habe den Text so verstanden, dass die Objekte nicht zerstört werden dürfen, bis alle atexit funktionen aufgerufen wurde...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: