Как я могу получить то, что вернула моя основная функция?

В программе на C, если мы хотим дать некоторый ввод от терминала, мы можем дать его:

int main(int argc, char *argv[])

Таким же образом, если мы хотим получить возвращаемое значение функции main(), то как мы можем его получить?

В каждом main() пишем return 1 или return 0; как я могу узнать, что мой main() вернулся в терминал?

Edit: 1

Я получаю, что echo $? мы можем получить возвращаемое значение main(), но оно позволяет мне только вернуть значение менее 125 (в Linux). Возвращаемое значение, которое больше не может быть получено с помощью $ variable, поэтому

Почему int возвращает тип main()? Почему бы не сохранить его short int?

Edit2

Откуда я могу узнать значение кода ошибки, если main() возвращает значение больше 125?

Ответы

Ответ 1

Большинство оболочек хранят код выхода предыдущей команды запуска в $?, чтобы вы могли сохранить или отобразить ее.

$ ./a.out
$ echo $?     # note - after this command $? contains the exit code of echo!

или

$ ./a.out
$ exit_code=$?    # save the exit code in another shell variable.

Обратите внимание, что в linux, хотя вы возвращаете int, в целом только значения, меньшие 126, безопасны в использовании. Более высокие значения зарезервированы для записи других ошибок, которые могут возникнуть при попытке выполнить команду или для записи того, какой сигнал, если таковой имеется, завершил вашу программу.

Ответ 2

У вашей оболочки, вероятно, есть специальная переменная $?, которая содержит последнее возвращаемое значение программы. Итак, вскоре после завершения вашей программы вы можете запустить:

echo $?

чтобы увидеть возвращаемое значение.

Ответ 3

В DOS/Windows вы можете использовать errorlevel в пакетном файле

executable optional arguments
if errorlevel 4 goto LABEL4
if errorlevel 3 goto LABEL3
if errorlevel 2 goto LABEL2
if errorlevel 1 goto LABEL1
:SUCCESS
echo SUCCESS; errorlevel 0
goto :eof
:LABEL1
echo FAILURE; errorlevel 1
goto :eof
:LABEL2
echo FAILURE; errorlevel 2
goto :eof
REM ...

Просто не забудьте проверить от самого большого до самого низкого, потому что if errorlevel 42 действительно означает "если уровень ошибок равен 42 или больше"

Ответ 4

Подводя комментарии и фрагменты, чтобы они находились в одном месте.

Программа C всегда имеет код выхода, который программа может решить для себя, если она нормально завершается, возвращая значение из функции main или вызывая функцию exit. Если программа прерывается ненормально, например, по ошибке сегментации, операционная система решает код выхода.

В Unix (Posix) код выхода представляет собой 8-битное значение: 0-255. Он сочетается с некоторыми другими метаданными с статусом: другие метаданные включают информацию о том, завершилась ли программа нормально или нет, если она была прекращена из-за сигнала, и если да, то какой сигнал. Подробнее см. на странице wait (2).

В Unix в оболочке статус предыдущей команды доступен как специальная переменная $?. Поскольку код выхода всего 8 бит, и он рассматривается как целое число без знака, если вы возвращаете отрицательное значение, оно становится положительным: -1 становится 255. Аналогичным образом, если вы возвращаете значение, превышающее 255, только наименьшее используются значительные 8 бит: 256 становится 0.

Возвращаемый тип main равен int, а не short или char, потому что нет никакой особой выгоды в том, чтобы сделать его более мелким, особенно на этом этапе истории, десятилетиями после его решения. Изменение его теперь приведет к ненужным осложнениям.

Если вы хотите выполнить программу с C, стандартная библиотека предоставляет функцию system, которая автоматически возвращает статус программы. (Обратите внимание, что system запускает команды через оболочку, и вам нужно быть очень осторожным в том, чтобы правильно экранировать все, если вы даете команде любые внешние имена файлов или другие вещи в командной строке.)

Для большей гибкости вы можете выполнять другие программы, используя системные вызовы fork, execl (или один из его вариантов, см. exec (3 )) и wait (уже упоминалось выше). Это мощный и гибкий, но также легко ошибиться, поэтому обязательно прочитайте документацию и сначала проверьте некоторые примеры программ. (С другой стороны, очень интересно изучить этот материал.)

Ответ 5

Вы можете получить значения выхода с помощью команды basic linux echo $? Коды ошибок являются стандартными, и детали объясняются в этом ссылка

Общие коды

**

0 - успех

1- общие ошибки

126- разрешение

127-Недопустимая команда

128-Неверные аргументы и фатальные ошибки

255-Вне диапазона **