È 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.