GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie lautet der Exit-Code des Programms, wenn assert() fehlschlägt?

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.


Linux
  1. Was genau passiert, wenn ich eine Datei in der Shell ausführe?

  2. Was bekomme ich, wenn Sudo ein Kernel-zerstörendes Programm ist?

  3. Was macht ein Programm, wenn es ein Sigkill-Signal sendet?

  4. Was sind Bash-Exit-Codes in Linux

  5. Was bedeutet __init im Linux-Kernel-Code?

Ubuntu-Varianten:Was ist der Unterschied?

Curl Herunterladen von HTML anstelle der eigentlichen Zip-Datei? Hier ist, was zu tun ist

Was ist :-!! im C-Code?

Was ist die kolorierte Version des Linux-Top-Programms?

Was macht das -e in einem Bash-Shebang?

Was ist die Umgebungsvariable XDG_VTNR?