Подтвердить что ты не робот

С++: как вернуть отрицательное значение в main.cpp

Как назначение в школе, мы должны написать программу на С++ и возвращать разные коды ошибок в main.

Проблема в том, что мы должны возвращать -2, если возникает конкретная ошибка, но я не знаю, как вернуть отрицательное значение.

Например:

int main()
{ 
    int a = -2; 
    return a;
}

В окнах это дает мне возвращаемое значение, например: 42232684, а в Linux: 253

Почему -2 не разрешено?

И как мне получить -2?

4b9b3361

Ответ 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-разрядного целого числа без знака.