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