Почему void main() так популярен?
В C89/C99/C11 в автономной среде функция точки входа определяется реализацией. В размещенной среде она должна быть int main
в строго соответствующей программе. Большинство современных компиляторов делают ошибку void main
. Тем не менее, я вижу, что многие пользователи используют void main
. Даже если это разрешено в несоответствующем компиляторе, зачем его использовать? Я не вижу практической причины, почему void main
было бы предпочтительнее int main
. Даже в C89, это поведение undefined, чтобы оставить значение return
.
Есть ли историческая причина популярности void main
?
Я не считаю, что мой вопрос в первую очередь основан на мнениях. В этом потоке уже представлены некоторые обоснованные идеи, такие как расширение Microsoft void main
, а так же популярность Window, а также результат того, что книги C перепечатывают неверную информацию. Это объективные и исторические причины.
Ответы
Ответ 1
Есть ли историческая причина популярности void main?
Историческая причина заключается, на мой взгляд, в том, что книги по программированию на C (особенно популистские) были написаны до того, как стандарт был принят и был опубликован после (или даже раньше) стандарта. Так много книг по программированию на C содержало объявление main с возвращаемым типом void. Иногда эти книги были переизданы без пересмотра их содержания. И из-за того, что старые компиляторы обычно поддерживали объявление main с void, такое объявление было популярным.
Возможно, некоторые производители компиляторов (возможно, даже Microsoft). Как вы знаете, С# позволяет объявлять Main с void. По крайней мере Borland С++ разрешил использовать void main) представил свои собственные определенные в реализации объявления main. и main с void был популярной декларацией, определенной реализацией. Таким образом, книги по программированию на языке C обычно ссылались на эти популярные компиляторы с указанием их основной реализации.
Ответ 2
Цитирование Lundin answer,
Если ваша программа работает в среде без хоста (ваша программа встроенная система или оперативная система), она может иметь любое возвращение тип. void main() наиболее распространен.
Если ваша программа запущена в размещенной среде (поверх ОС), main() должен возвращать int и может иметь дополнительные параметры.
EDIT:
Поскольку ОП задает вопрос о размещенной среде, я могу указать Keith answer,
Аналогично, C никогда не разрешал void main() иначе, чем продление срока действия; тот же стандарт 1989 года, в котором введено ключевое слово void определены два стандартных определения для main: int main (void) и int main (int argc, char * argv []).
и Pochi ,
Обычно вы хотите узнать статус выхода своей программы. Что причина, по которой у вас есть int main() - вы возвращаете свой статус выхода.
Из этих двух убедительных ответов я могу заключить в своём скромном мнении, что:
Во время C89/C99/C11 C может не разрешать void main
, но для небольших программ, созданных энтузиастами и учащимися и новичками, они могут не беспокоиться о возвращаемых значениях на этом этапе, поэтому void main
стал популярным.
Ответ 3
Если вы используете * NIX или MAC, выполните следующие действия
-
Скопируйте следующий код в test1.c
void main() {
}
-
Компилировать код в командной строке
cc test1.c
gcc test.c
-
Запуск после
./a.out
-
Запуск (это покажет вам, что возвращается вашей программой
echo $?
-
Сохраните этот код для test2.c
void main() {
int i = 5;
}
-
Повторите 2, 3 и 4 для test2.c
Вот почему это не рекомендуется.
Почему это было популярно? Я не знаю других ответов, кроме приведенных выше. Однако, у меня есть вопрос; был K & R 1st edition, используя void main()
или int main()
?
Ответ 4
Запись void main()
уменьшает типизацию, поскольку позволяет без предупреждения return 0;
опускать.
P.S. Лично я пишу только int main()
.