Хорошо известно, что программа в случае успешного завершения должна возвращать статус 0 и статус, отличный от нуля в случае неуспешного завершения. Но какой именно из 127 вариантов? Сегодня я встретил простой и гениальный ответ — можно использовать константы errno. Файл не найден — exit(ENOENT); не смог распарсить аргумет — exit(EINVAL). К сожеалению, весь диапазон errno недоступен: EOWNERDEAD=130 совпадает со статусом процесса, убитого SIGINT=2. Но идея мне всё равно нравится.