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

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

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

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

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

Изменить:1

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

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

Edit2

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

6 ответов

Решение

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

$ ./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. Более высокие значения зарезервированы для записи других ошибок, которые могут возникнуть при попытке выполнить команду, или для записи того, какой сигнал, если таковой имеется, завершил вашу программу.

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

echo $?

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

В 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 или выше"

Обобщая комментарии и кусочки, чтобы они были в одном месте.

Программа A 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 (уже упоминалось выше). Это мощный и гибкий инструмент, но он также легко допускает ошибки, поэтому обязательно прочитайте документацию и сначала ознакомьтесь с примерами программ. (С другой стороны, очень интересно изучать этот материал.)

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

Общие коды

**

0- успех

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

126- разрешение вопроса

127-Незаконная команда

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

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

в командной строке Windows для чтения возвращаемого значения из основного использования echo% errorlevel%

(Код) return.c

      #include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
    int i;

    printf("Enter a number");
    scanf("%d",&i);

   if(i==2)
        exit(1);
   if(i==3)
        exit(2);
    
   return 0;
}

ВЫХОД

&lt;strong&gt;ВЫВОД&lt;/strong&gt; вышеуказанной программы &lt;strong&gt;return.c&lt;/strong&gt;

Другие вопросы по тегам