Почему 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().