Es ist implementierungsspezifisch. Sie könnten dies tun:
int main()
{
assert(0);
}
Führen Sie es dann aus:
./a.out
echo $?
1 (<- oder was auch immer)
Dies wird Ihnen zumindest sagen, was Sie für Ihr Setup erwarten können. Ich bekomme 134 auf ein paar Linux-Kisten mit GCC und g++.
Der C99-Standard (unverändert in C11) besagt, dass assert
ruft abort
auf und die abort
Zeug sagt dies über den Rückgabecode:
Mittels des Funktionsaufrufs raise(SIGABRT)
wird eine implementierungsdefinierte Form des Status erfolglose Beendigung an die Hostumgebung zurückgegeben .
Es ist in den Abschnitten 7.2.1.1 (assert) und 7.20.4.1 (abort) des C99-Standards hier dokumentiert.
Viele UNIX-Systeme geben 128 plus die Signalnummer zurück (SIGABRT
ist Signal Nummer 6), also erhalten Sie möglicherweise 134. Was auch immer Sie erhalten, es sollte von der C-Implementierung dokumentiert werden.
Siehe zum Beispiel hier für gcc
. Obwohl es ziemlich still ist, was an die aufrufende Umgebung zurückgegeben wird. Aus den spezifischen Abschnitten hier:
Einige Entscheidungen werden von der Bibliothek und dem Betriebssystem (oder einer anderen Umgebung beim Kompilieren für eine freistehende Umgebung) getroffen; Details finden Sie in der Dokumentation.
Und hier:
Das Verhalten der meisten dieser Punkte hängt von der Implementierung der C-Bibliothek ab und wird nicht von GCC selbst definiert.
Ebenso der glibc
doco hier auf Programmbeendigung (insbesondere das Exit-Statusbit). Es erwähnt Konventionen, aber keine festen Regeln.