Vedo in molti software legacy e tutorial difettosi su Internet che raccomandano di utilizzare exit(-1)
, return -1
o simili per rappresentare "terminazione anomala". Il problema è che, almeno in POSIX, -1
non è mai stato e non è un codice di stato valido. man 3 exit
illustra che exit()
restituisce il valore di status & 0377
al genitore, il che significa che -1
diventa 255
. Sui sistemi non POSIX, EXIT_FAILURE
è consigliato per la portabilità. Ma non vedo mai "-1 significa terminazione anomala" in combinazione con "EXIT_FAILURE potrebbe essere qualcosa di diverso da 1", indicando che credono chiaramente che "-1" sia convenzionale anche su sistemi non POSIX.
Ecco un esempio di una domanda StackOverflow che lo perpetua. Il software "unrealircd" è anche un esempio di un programma che utilizza exit(-1)
per terminare il programma. In pratica, ciò rende difficile interfacciarsi con systemd
.
Da dove viene questo anti-pattern? È valido in qualche contesto?
unsigned char
.
char
poiché il suo intervallo di valori è compreso tra -128 e 127. Inoltre, ho già dichiarato che "-1" viene convertito in "255" nel mio corpo di domanda .