Основной C вопрос о возвращаемых значениях - PullRequest
0 голосов
/ 09 ноября 2009

Я только изучаю C и использую xCode для него (не уверен, имеет ли это значение). Этот код:

#include <stdio.h>

int main (int argc, const char * argv[]) { 
    int myInt;
    myInt = 2; 
    myInt *= ( (3*4) / 2 ) - 9; 
    printf("myInt = %d", myInt);
    return myInt; 
} 

Выводит это:

Session started at 2009-11-09 15:51:15 -0500.]
myInt = -6
The Debugger has exited with status 250.The Debugger has exited with status 250.

printf правильный, но как насчет возврата

A) завернуть его, и

Б) показать результаты дважды? (чтобы уточнить, если я поставлю return 0;, он только один раз печатает строку «отладчик вышел», со значением 0)

Спасибо!

Ответы [ 7 ]

10 голосов
/ 09 ноября 2009

Коды возврата интерпретируются оболочкой как целые числа без знака с диапазоном 0-255.

2 голосов
/ 09 ноября 2009

В Unix возвращаемое значение из программы ограничено диапазоном 0-255 (да, тип возвращаемого значения из main - int, но это историческая аномалия). Ознакомьтесь с документацией GNU по статусу выхода .

Что касается сообщения «Отладчик вышел с состоянием 250», отображаемого дважды, это происходит от процесса, который выполняет вашу команду, и поэтому вы не можете его контролировать.

0 голосов
/ 10 ноября 2009

-6 представляется как комплимент 2 из 6 в двоичном виде, чтобы сохранить его в памяти.

0 голосов
/ 10 ноября 2009

Ваш код возврата для main должен быть 0, если нет ошибки. Это общее соглашение в Unix и ничего не мешает в Windows. http://en.wikipedia.org/wiki/Main_function_%28programming%29

0 голосов
/ 10 ноября 2009

Обертка (как вы ее описали) является результатом невозможности вывести символ LF (перевод строки) как часть вашего вызова функции printf (). Вы можете исправить это, добавив \ n в строку формата печати. Измените свой код на это:

#include <stdio.h>

int main (int argc, const char * argv[]) { 
    int myInt;
    myInt = 2; 
    myInt *= ( (3*4) / 2 ) - 9; 
    printf("myInt = %d\n", myInt);
    return myInt; 
}

Что касается удвоения «Отладчик вышел со статусом 250». это функция вашего IDE / отладчика, а не результат вашего кода. Как объяснили другие, -6 = 0xFFFFFFFA, который при усечении до 8 битов и обработке как без знака равен 250 в десятичном виде.

0 голосов
/ 10 ноября 2009

Проверьте справочную страницу на exit() и _Exit():

Обе функции составляют младшую восьмерку биты аргумента состояния доступны в родительский процесс [...]

0 голосов
/ 09 ноября 2009

Я предполагаю, что xcode рассматривает состояние выхода как 00-FF (0-255) и -6 = 250 в этом случае

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