Подтвердить что ты не робот

Разница между основными (void) и main() в C

Может ли кто-нибудь сказать мне разницу между int main() и int main(void)? Почему оба они работают и что является аргументом по умолчанию для int main()?

4b9b3361

Ответ 1

Никаких различий при обычных обстоятельствах. Это не аргумент default для main() ', поскольку он вообще не имеет аргументов.

Здесь необычное обстоятельство. Если вы напишете свой собственный вызов на главную, то () позволит вам передать ему любые параметры, которые вам нравятся, а (void) заставит вас передать его никому. Тем не менее, ничто из этого не имеет значения в случае 99.99999999%, который является основным вызовом среды выполнения для запуска вашей программы. Время выполнения не знает и не заботится, если вы пишете () или (void).

Если вы кодируете стандартный int main(int argc, char **argv), вы получите там параметры своей командной строки.

Ответ 2

main() позволяет вам называть main с любым количеством параметров. main(void) заставляет вас называть main без параметров. Итак:

main(foo, bar);

Хорошо с main(), но не с main(void) - компилятор генерирует ошибку.

Теперь, если вы специально задаете вопрос о точке входа в программу, это не имеет особого значения; в любом случае у вас не будет аргументов в программе (argc, argv, envp).

Ответ 3

С практической точки зрения нет никакой реальной разницы. С помощью int main(void) вы явно заявляете, что main не принимает никаких параметров, поэтому вы не можете вызвать его с помощью какого-либо. С помощью int main() вы оставляете возможность вызова main с некоторыми параметрами.

Однако, за исключением странных ситуаций, таких как кодовый гольф или умышленно запутанный код, вы все равно не вызываете main - это точка входа в программу, поэтому он автоматически вызывается кодом запуска. Код запуска будет передавать аргументы командной строки в любом случае, поэтому ваши варианты не изменяют способ его вызова, только если вы используете или игнорируете передаваемые параметры.

Стандарт специально позволяет вам определять main с параметрами или без них (§5.1.2.2.1/1):

Функция, вызванная при запуске программы, называется main. Реализация не объявляет прототип для этой функции. Он определяется с типом возврата int и без Параметры:

    int main(void) { /* ... */ }

или с двумя параметрами (называемыми здесь argc и argv, хотя любые имена могут быть используются, поскольку они являются локальными для функции, в которой они объявлены):

    int main(int argc, char *argv[]) { /* ... */ }

или эквивалент;

Несмотря на то, что он находится за пределами указанных тегов, в С++ ситуация несколько отличается. В C объявление функции, например:

int f();

указывает, что f - это функция, возвращающая int, но не дает никакой информации о количестве или типе параметров f может ожидать (это в первую очередь относится к совместимости со старым кодом - за один раз, это был единственным способом объявить функцию в C). В С++ это же объявление явно объявляет f как функцию, которая не принимает никаких параметров, поэтому попытка вызвать f с одним или несколькими параметрами не может вызвать эту функцию (она должна либо вызвать другую перегрузку, либо вызвать ошибку, если подходящая перегрузка).