GNU/Linux >> Linux Esercitazione >  >> Linux

Quando assert() fallisce, qual è il codice di uscita del programma?

È specifico dell'implementazione. Potresti fare così:

int main()
{
    assert(0);
}

Quindi eseguilo:

./a.out
echo $?

1 (<- o altro)

Questo almeno ti dirà cosa aspettarti dalla tua configurazione. Ricevo 134 su un paio di macchine Linux sia con GCC che con g++.


Lo standard C99 (invariato in C11) afferma che assert chiama abort e il abort roba afferma questo riguardo al codice di ritorno:

Una forma definita dall'implementazione dello stato terminazione non riuscita viene restituita all'ambiente host mediante la chiamata di funzione raise(SIGABRT) .

È documentato nella sezione 7.2.1.1 (assert) e 7.20.4.1 (abort) dello standard C99 qui.

Molti sistemi UNIX restituiranno 128 più il numero del segnale (SIGABRT è il segnale numero 6) quindi potresti ottenere 134. Qualunque cosa tu ottenga, dovrebbe essere documentata dall'implementazione C.

Ad esempio, vedi qui per gcc . Sebbene sia abbastanza silenzioso su ciò che viene restituito all'ambiente chiamante. Dalle sezioni specifiche qui:

Alcune scelte vengono effettuate dalla libreria e dal sistema operativo (o altro ambiente durante la compilazione per un ambiente indipendente); fare riferimento alla loro documentazione per i dettagli.

E qui:

Il comportamento della maggior parte di questi punti dipende dall'implementazione della libreria C e non è definito dallo stesso GCC.

Così è il glibc doco qui sulla terminazione del programma (in particolare il bit di stato di uscita). Menziona le convenzioni ma non regole fisse.


Linux
  1. Cosa otterrei quando Sudo è un programma distruttivo del kernel?

  2. chiama una funzione quando il programma è finito con ctrl c

  3. Qual è la dimensione massima del valore di una variabile di ambiente Linux?

  4. Qual è il significato di caddr_t e quando viene utilizzato?

  5. Cos'è :-!! in codice C?

Sapori di Ubuntu:qual è la differenza?

Curl Scaricare HTML invece del vero file zip? Ecco cosa fare

Cosa sono i codici di uscita Bash in Linux

Cosa significa __init nel codice del kernel di Linux?

Quali parti di questo codice assembly HelloWorld sono essenziali se dovessi scrivere il programma in assembly?

Qual è la versione colorata del programma top di Linux?