Почему я не могу вернуть большие значения из основной функции? - PullRequest
20 голосов
/ 17 сентября 2010

Я пытаюсь вернуть большее значение, например 1000, из моей основной функции, но когда я набираю echo $?, отображается 0.

Если я возвращаю меньшее значение, например 100, отображается правильное значение.

Мой код:

int main(void)
{
     return 1000;
}

Есть ли ограничения на значения, которые мы можем вернуть?

Ответы [ 3 ]

22 голосов
/ 17 сентября 2010

Здесь есть две взаимосвязанные концепции: состояние выхода C и код возврата bash.Они оба охватывают диапазон 0-255, но bash использует числа выше 126 для своих собственных целей, поэтому было бы затруднительно возвращать их из вашей программы.

На всякий случай ограничьте коды состояния выхода 0-127,поскольку это наиболее переносимо, по крайней мере, это подразумевается http://docs.python.org/library/sys.html#sys.exit.

Состояние выхода C помещается в bash $?переменная после выполнения, но bash использует 127 для обозначения «команда не найдена», так что вы можете избежать этого. Справочная страница Bash .

Bash также использует 128-255 для сигналов - они указывают, что процесс был прерван сигналом: exit code = 128 + signal number.Таким образом, вам, возможно, удастся избежать использования чисел, близких к 255. Поскольку маловероятно, что номера сигналов будут такими высокими.

Помимо этих общих ориентиров существует множество попыток определить, что должны означать различные числа:1013 *http://tldp.org/LDP/abs/html/exitcodes.html.

Итак, если вы хотите вернуть произвольное целое число из вашей программы, вероятно, лучше всего распечатать его на стандартный вывод и захватить его с помощью VALUE=$(program) из вашего скрипта bash.

3 голосов
/ 17 сентября 2010

Возвращаемое значение main (то есть состояние выхода из приложения) ограничено диапазоном [0, 255] в * NIX. 1000 находится вне диапазона, и ОС воспринимает его как 0, предположительно.

1 голос
/ 29 мая 2014

В Unix-земле возвращаемое значение main ограничено, потому что exit там ограничено диапазоном 8-битного байта.

В Windows есть единственное значение STILL_ACTIVE со значением 259, которое лучше избегать в качестве кода завершения процесса.

Кроме этого, в Windows вы можете вернуть 32-битный код, такой как HRESULT, и это обычно делается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...