Почему нам нужно использовать int main, а не void main в C ++?

Почему нам нужно использовать int main, а не void main в C ++?


person kasperasky    schedule 16.01.2009    source источник


Ответы (8)


Короткий ответ заключается в том, что стандарт C ++ требует, чтобы main() возвращал int.

Как вы, наверное, знаете, значение, возвращаемое функцией main(), используется библиотекой времени выполнения в качестве кода выхода для процесса. И Unix, и Win32 поддерживают концепцию (маленького) целого числа, возвращаемого процессом после его завершения. Возврат значения из main() предоставляет программисту один способ указать это значение.

person Greg Hewgill    schedule 16.01.2009
comment
Это немного поздно, но я думал, что стандарт C определяет только int main () и int main (int argc, char * argv []). - person Powerlord; 07.02.2009
comment
Стандарт C позволяет определять main как int main(void), как int main(int argc, char *argv[]) или эквивалент, или или каким-либо другим способом, определяемым реализацией. Требования стандарта C ++ аналогичны, за исключением того, что main() должен всегда быть определен для возврата int. (Это относится только к размещенным средам; автономные (т. Е. Встроенные) системы могут определять точку входа программы любым удобным для них способом.) - person Keith Thompson; 25.09.2012
comment
Краткий ответ - это действительно единственный ответ. Было бы вполне разумно разрешить void main() { ... }; вы все равно можете использовать exit(), чтобы вернуть код выхода в среду, или просто по умолчанию 0, если вы дойдете до конца main. Причина, по которой не следует использовать void main(), заключается в том, что языковой стандарт не разрешает этого, равно как и double main(long long foo, time_t bar). - person Keith Thompson; 25.09.2012

Большинство операционных систем сообщают пользователю или вызывающему процессу, было ли приложение успешным или нет. Это особенно полезно при написании сценариев, где сценарий может условно разветвляться (если-то) по результатам выполнения программы. Что-то вроде:

// pseudo-code
screenscrape  http://mydatasource.com > results.txt
if errorlevel == 0 then
   processfile results.txt
else
   echo Screen Scraping Failed!
end if

Этот статус результата выполняется через возвращаемое значение main.

В то время как некоторые компиляторы допускают void main, для единообразия и простоты стандарт ANSI требует одного-единственного прототипа main:

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

Поскольку в C аргументы очищаются вызывающей стороной, автор main может пренебречь объявлением или обработкой аргументов argc и argv. Однако, если процедуры настройки, вызывающие main, ожидают возвращаемого значения типа int и вместо этого не находят его, поведение может быть неопределенным.

Короткий ответ:

  • Возвращаемое значение main полезно для написания сценариев.
  • Процедуры установки и очистки, которые вызывают main, требуют согласованного интерфейса для использования.
person abelenky    schedule 16.01.2009
comment
Мне нравится ваше объяснение. Не могли бы вы представить рабочий пример [сценарий, который действительно работает] - person saurabh gupta; 28.10.2018

Основная причина изменения

пустая функция() { }

to

int main () {}

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

return 0;

идентифицируйте программу, успешно выполненную, если возвращено какое-либо число, а не 0, что означает, что произошла какая-то ошибка, которая имеет код ошибки, который возвращается функцией main. если вы работаете в IDE кодового блока, посмотрите в журнале сборки, если основной возврат 0, он обычно отображается

Process terminated with status 0

иначе он отображает код состояния красным цветом, что означает, что произошла ошибка

person Code Warrior    schedule 09.07.2015
comment
спасибо .. хорошее объяснение - person WISAM; 09.05.2019

Из Википедии:

Значение, возвращаемое основной функцией, становится статусом завершения процесса, хотя стандарт C приписывает конкретное значение только двум значениям: EXIT_SUCCESS (традиционно ноль) и EXIT_FAILURE. Значение других возможных возвращаемых значений определяется реализацией.

person BBetances    schedule 16.01.2009

Как и в C, потому что процесс выдаст ОС код выхода.

Вы можете использовать

int main (int argc, char ** argv)
{
  return (0);
}

or

int main (int argc, char ** argv)
{
  exit (0);
}

Это по крайней мере в C89 IIRC.

person Keltia    schedule 16.01.2009

Поскольку int - это код возврата, программа может вернуться в ОС.

Вы можете запросить это значение, чтобы проверить, была ли операция успешной.

Это было чрезвычайно полезно при использовании сценариев командной строки.

person Toon Krijthe    schedule 16.01.2009
comment
И это все еще полезно. Сценарии командной строки не умерли, понимаете? ;-) - person peSHIr; 16.01.2009

Когда мы выполняем нашу программу, чтобы проверить, работает она успешно или нет. Поэтому, когда он возвращает 0, это означает, что он истинный и работает успешно, если он возвращает 1, он не запускается успешно, и это значение int сообщает ОС, успешно ли выполнена программа или нет.

person user2786956    schedule 17.09.2013

Возможно, потому что имеет смысл чисто выйти с кодом состояния из метода main(). В Java мы должны эмулировать это с помощью System.exit(), что не так уж и изящно.

person Rahul    schedule 16.01.2009