почему g ++ не возвращает ошибку при возврате -1 - PullRequest
2 голосов
/ 07 апреля 2019
int main()
{
    return -1;
}

Взяв приведенный выше простой код, например, в main, если нет ошибки, верните 0;если есть ошибка, верните -1.Но почему g ++ не показывает никаких ошибок или сообщений после выполнения?Принимая во внимание, что в XCode это показывает «Программа закончилась с кодом выхода: 255», что я могу сказать что-то не так.или, может быть, вопрос: в g ++, как я могу сказать main с некоторой ошибкой и возвращением ненулевого значения?

Спасибо.

1 Ответ

2 голосов
/ 07 апреля 2019

(уточняя, что уже было указано в комментариях)

C ++ - (обычно) скомпилированный язык.(Хотя также существуют интерпретаторы, XCode с clang или gcc не принадлежат им.)

Исходный код (предоставленный OP) скомпилирован в машинный код , исполняемый процессором CPU .(Обычно это процессор, на котором работает компилятор, но это может быть и для другого → кросс-компиляция .) Машинный код - это двоичный код (трудно читаемый обычным пользователем), который является единственным кодомкоторый может быть напрямую «интерпретирован» процессором.

Созданный исполняемый файл должен запускаться с использованием определенных функций ОС (например, fork() и exec()).Оболочка (например, bash) может сделать это, но может быть запрограммирована и в других программах.

IDE s (например, XCode или VisualStudio) предоставляют команды (кнопки) длякомпиляция и запуск.Кнопка «Воспроизвести» проверяет, был ли исходный код изменен с момента последней компиляции.Если это так, он компилируется снова и результат сохраняется в виде исполняемого файла.(В противном случае компиляция может быть пропущена.) Впоследствии (при условии, что не было никаких ошибок компиляции) процесс IDE fork() sa для exec() s исполняемого файла (т.е. скомпилированной программы).

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

echo $?

печатает возвращенное значение последнего завершенного дочернего процесса.

AnIDE может сообщить о возвращенном значении в каком-то окне журнала.В VisualStudio это окно вывода.Как описано в вопросе OP, похоже, что в XCode он похож.

...