Вопрос по return, c, bash, unix – Что я должен сделать, чтобы получить полное возвращаемое значение c-программы из командной строки?

6

У меня простая C-программа"./my_program"

<code>#include <stdio.h>

int main (int argc , char **argv) {


   unsigned int return_result = 0x474;
   printf("return_result = %d = 0x%x \n",return_result,return_result);
   return return_result;

}
</code>

В результате эта программа печатает:

<code>return_result = 1140 = 0x474 
</code>

Я хочу получить возвращаемое значение c-программы в скрипте bash. По этой ссылке В любом случае, чтобы получить возвращаемое значение из программы из командной строки? Я должен получить эту переменную из $?

Но когда я запускаю такие команды, следствие:

<code>./my_program
echo $?
</code>

я получил

<code>116
</code>

Очевидно, что 116 = 0x74 (младший байт). Но я бы хотел получить целое значение без знака int. Что случилось? Что я должен сделать, чтобы получить полное возвращаемое значение c-программы из командной строки? Это не только "unsigned int" тип. Что делать в случае, если я создал какой-то сложный тип, например, - структура.

Я попробовал это:

<code>return ((unsigned int) return_result_section_size);
</code>

Это не работает.

Ваш Ответ

2   ответа
0

после того, как вы закончите с казнью. Возвращаемое значение из main обычно используется для указания статуса выполнения. Максимальное значение ограничено 512. Если вы попытаетесь вернуть значение больше 512, значение 512% будет установлено в $ ?.

хм ... я думаю, что был неправ для максимального значения. Максимальное значение ограничено байтом - 255.
Может быть, вы говорите о «Максимальное значение ограничено 255»? Я только что попытался вернуть 474. Результат не 474. Lucky Man
Отредактируйте свой ответ так, чтобы чтение комментариев не требовалось.
Магия должна иметь максимум 512. И ваша формула неверна. Так должно бытьval%MAX.
6

ограничено одним байтом, Если вы хотите вывести больше, вы можете вместо этого записать это в стандартный вывод или в файл.

Тогда почему стандарт C постановляет, чтоmain возвращаетсяint и неchar? Я понятия не имею...

Почемуmain начал возвращатьintЯ полагаю: 1. Более естественно возвращать собственный целочисленный тип платформы; 2. Неявныйint.
Хорошо, спасибо за ответ! Lucky Man
Вероятно, потому что это обычно используетсяint для чисел, которым не нужно ничего большего. По той же причине, что иint argc и неunsigned int argc
То, что Unix ограничивает коды выхода одним байтом, не означает, что стандарт должен навязывать такое же ограничение другим платформам.
@jamesdlin: стандарт не накладывает ограничений, но допускает гибкость и отражает работу нескольких платформ. Стандарт учитывает только два допустимых возвращаемых значения из main: EXIT_SUCCESS и EXIT_FAILURE. Любое другое значение определяется реализацией. Это позволяет некоторым платформам возвращать только последний возвращенный байт. Реализация может делать все, что захочет, если EXIT_SUCCESS и 0 считаются успешными, а EXIT_FAILURE - неудачными. Требование, чтобы значение, возвращенное из main, было доступно, было бы существенным ограничением.

Похожие вопросы