Eu vejo em um monte de software legado e maus tutoriais na Internet que recomendo o uso exit(-1)
, return -1
ou similar para representar "finalização anormal". O problema é que, pelo menos no POSIX, -1
nunca foi e não é um código de status válido. man 3 exit
ilustra que exit()
retorna o valor de status & 0377
para o pai, o que significa que ele -1
se torna 255
. Em sistemas não POSIX, EXIT_FAILURE
é recomendado para portabilidade. Mas nunca vejo "-1 significa rescisão anormal" em conjunto com "EXIT_FAILURE pode ser algo diferente de 1", indicando que eles acreditam claramente que "-1" é convencional, mesmo em sistemas não POSIX.
Aqui está um exemplo de uma pergunta StackOverflow que perpetua isso. O software "unrealircd" também é um exemplo de programa usado exit(-1)
para finalizar o programa. Na prática, isso dificulta a interface systemd
.
De onde veio esse anti-padrão? É válido em algum contexto?
unsigned char
.
char
pois seu intervalo de valores é -128 a 127. Além disso, eu já afirmei que "-1" é convertido em "255" no corpo da minha pergunta .