Vedo in molti software legacy e cattivi tutorial su Internet che raccomandano di usare 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, ovvero che -1
diventa 255
. Sui sistemi non POSIX, è consigliato EXIT_FAILURE
per la portabilità. Ma non vedo mai "-1 significa terminazione anomala" in congiunzione con "EXIT_FAILURE può essere qualcosa di diverso da 1", indicando che chiaramente credono che "-1" sia convenzionale anche su sistemi non POSIX.
Ecco un esempio di domanda StackOverflow che perpetua questo. Il software "unrealircd" è anche un esempio di un programma che usa exit(-1)
per terminare il programma. In pratica, ciò rende difficile l'interfacciamento con systemd
.
Da dove viene questo anti-pattern? È valido in qualche contesto?