Что было неправильно с void main()? - программирование
Подтвердить что ты не робот

Что было неправильно с void main()?

Почему настройка типа возвращаемой точки на void в С++ всегда была обескуражена и впоследствии была удалена стандартом и запрещена современными компиляторами? Почему это считается плохой практикой?

Теперь, поскольку я понимаю, что С# и Java позволяют возвращать тип возвращаемой точки void i.e

static void main(String[] args) /* Java */
static void Main(string[] args) /* C# */

И программисты на С# и Java не считают это плохой практикой, они часто используют его.

Другие языки, которые (только для того, чтобы быть, я сомневаюсь, что С++ будет успешным в этом десятилетии, по крайней мере) возможные преемники С++, такие как язык программирования D или Vala, также позволяют void main(). Итак, как вы можете видеть, я сомневаюсь, что сообщество С++ удалило его из стандарта, потому что оно было слишком неясным или непопулярным.

Итак, мой вопрос: почему С++ Community Remove void main()? Что случилось с этим?

4b9b3361

Ответ 1

Комитет по стандартам на C++, скорее всего, предпочел бы потребовать int main() из-за большого объема существующего кода, который, как ожидается, будет использовать оператор return для возврата определенного кода выхода в систему выполнения. Было бы необоснованным ожидать, что весь существующий код изменится для использования exit() вместо этого, поэтому int main() было принято требование в стандарте.

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

Итак, вещь, которая была бы "неправильной" при выборе void main() для стандарта С++, заключалась бы в том, что она сломала существующий код, который ожидал использовать return, и значение кода выхода из main().

Ответ 2

С++ никогда не разрешал void main(), хотя некоторые компиляторы могли разрешить это либо как расширение, либо просто потому, что не диагностировали его.

Аналогично, C никогда не разрешал void main() кроме как расширение; тот же стандарт 1989 года, который ввел ключевое слово void, определил два стандартных определения для main: int main(void) и int main(int argc, char *argv[]).

Другие языки допускают это, потому что, ну, это другие языки.

Нет особого преимущества в возможности писать void main(), а не int main(). Вам даже не нужно явно возвращать значение; падение с конца main эквивалентно return 0; (в С++ и в C, начиная с C99).

Ответ 3

Обычно вы хотите узнать статус выхода своей программы. Вот почему у вас есть int main() - вы возвращаете свой статус выхода.

Ответ 4

Это неправильно, потому что это не то, что стандарт С++ указывает на юридический main. Никто не заботится о том, что указывают другие языки. Для программ на С++ актуальным является только стандарт С++, и он говорит int.