В качестве задания в школе мы должны написать программу на C ++ и вернуть разные коды ошибок в main
,
Проблема в том, что мы должны вернуться -2
если возникает конкретная ошибка, но я не знаю, как вернуть отрицательное значение.
Например:
int main()
{
int a = -2;
return a;
}
В Windows это дает мне возвращаемое значение, как: 42232684
а в линуксе есть: 253
Зачем -2
не допускается?
И как я могу получить -2
?
Проблема в том, что то, что возвращается в ОС, интерпретируется оболочкой ОС так, как это нравится ИТ, а не как вашей программе.
основная функция возвращает int, и return -2
это то, что ваша программа должна делать.
253 — это -2 в 2 с дополнением на 8 бит.
Проблема — здесь — несоответствие между спецификациями C ++ (int main()
) и способ использования оболочки. Но это не зависит от программы.
Само задание является ловушкой.
Из стандарта C ++ 11 18.5 / 8:
Если статус равен нулю или EXIT_SUCCESS,
Реализация определенной формы статуса успешного завершения возвращается. Если статус — EXIT_FAILURE, возвращается определяемая реализацией форма неудачного завершения статуса.
В противном случае возвращаемый статус определяется реализацией.
Таким образом, полностью совместимо, что вы получаете разные результаты для разных платформ и / или компиляторов.
Unix и linux ограничены 8-битными кодами возврата, -2 равно 0xfe. Что ваша оболочка поймет как 254, когда вы echo $?
Вы должны дать код возврата от 0 до 255.
http://en.wikipedia.org/wiki/Exit_status
в POSIX-совместимых состояниях выхода ограничены значениями 0-255,
диапазон 8-битного целого без знака.