int main и void main в чем разница

Разница между int main() и int main (void)?

Что означает следующее:

Я думаю, что int main() <. >означает, что main не получает никаких параметров (из командной строки):

Но что означает int main(void) <. >? что означает void?

Я посмотрел здесь, но это как-то другой вопрос.

ОТВЕТЫ

Ответ 1

В C разница сомнительна. Некоторым нравится утверждать, что последняя версия (без void ) технически является просто общим расширением реализации и не гарантируется работой по стандарту из-за формулировки в стандарте. Однако в стандарте четко указано, что в определении функции пустой набор параметров имеет четко определенное поведение: функция не принимает никаких параметров. Таким образом, такое определение для основного соответствует следующему описанию в стандарте:

Он [основной] должен быть определен с типом возврата int и без параметров.

Однако существует заметная разница между ними: а именно, версия без void не может обеспечить правильный прототип функции:

О, и просто чтобы быть полным: void имеет во всех деклараторах функций следующее значение:

(6.7.6.3p10) Частный случай неименованного параметра типа void как единственного элемента в списке указывает, что функция не имеет параметров.

Ответ 2

Ответ 3

Ответ 4

В С++ нет разницы, оба одинаковы.

Ответ 5

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

Для размещенных систем, 5.1.2.2.1 применяется запуск программы:

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

. (больше текста следует в отношении стилей argv/argc и т.д.).

10 Частный случай неименованного параметра типа void как единственного элемента в списке указывает, что функция не имеет параметров.

Использование деклараторов функций с пустыми скобками (не деклараторы типов параметров прототипа) является устаревшей функцией.

И вот в чем разница. Являясь объявлением функции, int main() является плохой стиль из-за вышеизложенного, так как он не гарантированно работает в следующей версии стандарта C. Он помечен как устаревшая функция в C11.

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

Ответ 6

Ответ 7

Ответ 8

Я знаю, что поток старый, но несколько лет назад этот вопрос беспокоил меня, поэтому я хотел бросить свою половину процента (если это).

Я всегда рассматриваю функции C, как если бы они фиксировали количество аргументов независимо от контекста, если только они не используют va_args. То есть, я верю, что ВСЕГДА имеют прототип:

даже если аргументы не переданы, функция имеет эти аргументы в стеке, потому что основная функция не имеет перегрузки функций.

C имеет возможность иметь примитивную перегрузку, просто делая вид, что аргумент отсутствует. В этом случае аргумент все еще передается и находится в стеке, но вы никогда не обращаетесь к нему, поэтому он просто уменьшает размер исходного кода.

Высказывание int main() просто означает, что я знаю, что функция может иметь параметры, но я их не использую, поэтому я пишу int main().

Высказывание int main (void) говорит о том, что main НЕКОТОРНО не имеет аргументов и подразумевает наличие двух разных прототипов функций:

Так как C не имеет функции перегрузки, это несколько вводит меня в заблуждение, и я не доверяю коду с основным (void) в нем. Я бы не стал, если main NEVER принял какие-либо параметры, и в этом случае main (void) будет полностью в порядке.

ПРИМЕЧАНИЕ. В некоторых реализациях есть больше параметров в основном, чем argc и argv, таких как env, но это меня не беспокоит, потому что я знаю, что я не говорю прямо, что это только два параметра, но это минимальные параметры, и все в порядке, чтобы иметь больше, но не меньше. Это противоречит прямому утверждению int main (void), который кричит на меня, поскольку ЭТОТ ФУНКЦИЯ НЕТ ПАРАМЕТРОВ, что неверно, поскольку это так, они просто опускаются.

Вот мой базовый код:

./sample У меня явно есть аргументы

У функции явно есть аргументы, переданные ей, несмотря на то, что она явно не говорит о том, что она не набирает void в прототип функции.

(6.7.6.3p10) Частный случай неименованного параметра типа void как только элемент в списке указывает, что функция не имеет параметров.

Таким образом, говоря, что функция имеет пустоту как аргумент, но фактически наличие аргументов в стеке является противоречием.

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

ПРИМЕЧАНИЕ2: _argc, _pargv зависят от системы, чтобы найти ваши значения, которые вы должны найти, запустив эту программу:

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

Читайте также:  какой номер налоговой инспекции указывать в 3 ндфл

Источник

int main() VS void main()

Вот товарищ Герберт Шилдт считает, что функция main() должна вид

Т.е. в случае удачи выполнения программы должен возвращаться ноль.

Но я лично симпатизирую варианту

Добавлено через 50 секунд
Симпатизирую из-за компактности.

В чем разница между int main()<> и int main(void)<>?
Только недавно начал изучать язык, и появилось несколько вопросов: 1) в чем разница между int.

Какая разница между int main и void main?
какая разница между (int main) i (void main)?

int main() или int main(void)?
чем отличается : не сообщаю о наличии аргументов функция не принимает никаких аргументов.

Ну это, как бы, истина!

Добавлено через 44 секунды
Я, лично, изпользую

Решение

А кто сказал, что она должна что-то возвращать?

Добавлено через 2 минуты

А кто сказал, что она должна что-то возвращать?

Ну собственно почему бы и нет? по моему она нужна для
выпoлняется глaвный цикл трaнсляции (это не что-то возвращать?)
Если бы там ещё аргументы этой функции были указаны, то можно было бы с нулём по варьировать.

P.S. или я ничего не поняла?

Решение

Other platform-dependent formats are also allowed by the C and C++ standards, except that in C++ the return type must stay int; for example, Unix (though not POSIX.1) and Microsoft Windows have a third argument giving the program’s environment, otherwise accessible through getenv in stdlib.h:

Mac OS X and Darwin have a fourth parameter containing arbitrary OS-supplied information, such as the path to the executing binary:

«ramses, странный вы человек все-таки)»

Ога, есть во мне такое) Эх.. Буду я первое время плеваться, когда int main() использовать.

З.Ы. Visual C++ пропускает, гад..

Решение

От void main() к int main()
Ребят, недавно начал обучаться программированию на cpp на Windows. Перешёл на Mac ( Да, знаю, что.

Void main or Int main
Как правильнее использовать void или int в main? И обязательно возвращать return 0 в конце.

Источник

Разница между int main () и int main (void)?

что означает следующее:

думаю, что int main() <. >означает, что main не получает никаких параметров (из командной строки), однако:

8 ответов:

В C, разница сомнительна. Некоторые любят утверждать, что последняя версия (без void ) технически является просто общим расширением реализации и не гарантирует работу по стандарту из-за формулировки в стандарте. Однако в стандарте четко указано, что в определении функции пустой набор параметров, имеет четко определенные поведение: что функция не принимает никаких параметров. Таким образом такая определение для main соответствует следующему описанию в стандарте:

Он [main] должен быть определен с возвращаемым типом int и без параметров.

существует, однако, заметная разница между ними: а именно, версия без void не удается предоставить правильный прототип для функции:

О, и просто, чтобы быть полным: void имеет следующее значение во всех деклараторах функций:

(6.7.6.3p10) частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.

В C++ нет никакой разницы, оба одинаково.

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

для размещенных систем, 5.1.2.2.1 запуск программы применяется:

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

. (далее следует текст что касается стилей argv / argc и т. д.).

интересная часть «без параметров». int main() и int main (void) в настоящее время эквивалентны, так как они оба являются деклараторами функций и не имеют параметров. Применяется следующее (6.7.6.3):

10 частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.

14 список идентификаторов объявляет только идентификаторы параметров функции. пустой список в деклараторе функций, который является частью определения этой функции, указывает, что функция не имеет параметров. пустой список в деклараторе функций, который не является частью определение этой функции указывает, что нет информации о количестве или типах параметров входит в комплект поставки.145)

использование деклараторов функций с пустыми скобками (не деклараторы типа параметров прототип-формат) является устаревшей функцией.

и вот в чем разница. Будучи декларатором функций, int main() и плохой стиль из-за вышеизложенного, так как он не гарантированно работает в следующей версии стандарт C. Он помечается как устаревшая функция в C11.

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

Я знаю, что нить старая, но этот вопрос беспокоил меня некоторое время несколько лет назад, поэтому я хотел бросить свои полцента(если это так).

Я всегда рассматриваю функции C, как если бы они имели фиксированное количество аргументов независимо от контекста, если они не используют va_args. То есть, я доверяю main, чтобы всегда иметь прототип:

Читайте также:  что такое гормональный сбой у подростков девочек симптомы

даже если аргументы не передаются, функция имеет эти аргументы в стеке, потому что основная функция не имеет функции перегрузка.

C имеет возможность иметь примитивную перегрузку, просто притворяясь, что аргумента нет. В этом случае аргумент все еще передается и находится в стеке, но вы никогда не обращаетесь к нему, поэтому он просто уменьшает размер исходного кода.

говоря int main () просто означает, что я знаю, что функция может иметь параметры, но я не использую их, поэтому я пишу int main ().

говоря int main (void) говорит, что main, конечно, не имеет аргументов, и подразумевает, что существуют два разных прототипа функций:

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

примечание: в некоторых реализациях есть больше параметров в main, чем argc и argv, таких как env, но это меня не беспокоит, потому что я знаю, что я явно не говорю, что это только два параметра, но это минимальные параметры, и это нормально иметь больше, но не меньше. Это в отличие от прямого высказывания int main (void), которое кричит на меня, поскольку эта функция не имеет параметров, что неверно, поскольку это так, они просто опущены.

вот мой базовый код:

./ пример у меня явно есть аргументы

функция явно имеет аргументы, переданные ей, несмотря на то, чтобы явно сказать, что это не происходит путем ввода void в прототип функции.

(6.7.6.3p10) частный случай неназванного параметра типа void в качестве единственный пункт в списке указывает, что функция не имеет параметров.

таким образом, говоря, что функция имеет void в качестве аргумента, но на самом деле имея аргументы в стеке является противоречием.

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

NOTE2: _argc, _pargv зависят от системы, чтобы найти свои значения, вы должны найти их, запустив эту программу:

эти значения должны оставаться правильными для вашей конкретной системы.

Источник

Разница между int main () и int main (void)?

что означает следующее:

думаю, что int main() <. >означает, что main не получает никаких параметров (из командной строки), однако:

8 ответов

В C++ нет никакой разницы.

В C, разница сомнительна. Некоторые любят утверждать, что последняя версия (та, что без void ) является технически просто общим расширением реализации и не гарантируется работа по стандарту из-за формулировки в стандарте. Однако в стандарте четко указано, что в определении функции пустой набор параметров имеет четко определенное поведение: функция не принимает никаких параметров. Таким образом, определение для main соответствует следующему описанию в стандарте:

Он [main] должен быть определен с возвращаемым типом int и без параметров.

существует, однако, заметная разница между ними: а именно, версия без void не удается предоставить правильный прототип для функции:

О, и просто для полноты: void имеет следующее значение во всех деклараторах функций:

(6.7.6.3p10) частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.

В C++ нет никакой разницы, оба одинаково.

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

для размещенных систем, 5.1.2.2.1 запуск программы применяется:

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

. (далее следует текст относительно стилей argv / argc etc).

интересная часть- «без параметров». int main() и int main (void) в настоящее время эквивалентны, поскольку они оба являются деклараторами функций и не имеют параметров. Применяется следующее (6.7.6.3):

10 частный случай неназванного параметра типа void в качестве единственного элемента в списке указывает, что функция не имеет параметров.

14 список идентификаторов объявляет только идентификаторы параметров функции. пустой список в деклараторе функций, который является частью определения этой функции, указывает, что функция не имеет параметров. пустой список в деклараторе функций, который не является частью определение этой функции указывает, что нет информации о количестве или типах параметры поставлены.145)

использование деклараторов функций с пустыми скобками (а не деклараторов типов параметров прототипа) является устаревшей функцией.

и вот в чем разница. Будучи декларатором функций, int main() is плохой стиль из-за вышеизложенного, так как не гарантируется работа в следующей версии стандарт C. Он помечен как устаревшая функция в C11.

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

Читайте также:  что делать если hqd не тянется и мигает

Я знаю, что нить старая, но этот вопрос беспокоил меня некоторое время несколько лет назад, поэтому я хотел бросить свои полцента(если это).

Я всегда рассматриваю функции C, как если бы они имели фиксированное количество аргументов независимо от контекста, если они не используют va_args. То есть я доверяю main всегда иметь прототип:

даже если аргументы не передаются, функция имеет эти аргументы в стеке, потому что основная функция не имеет функции перегрузка.

C имеет возможность иметь примитивную перегрузку, просто делая вид, что аргумента нет. В этом случае аргумент все еще передается и находится в стеке, но вы никогда не обращаетесь к нему, поэтому он просто уменьшает размер исходного кода.

говоря int main () просто означает, что я знаю, что функция может иметь параметры, но я не использую их, поэтому я пишу int main ().

говоря int main (void) говорит, что main, безусловно, не имеет аргументов, и подразумевает, что существуют два разных прототипа функций:

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

примечание: в некоторых реализациях в main больше параметров, чем argc и argv, таких как env, но это меня не беспокоит, потому что я знаю, что я явно не говорю, что это только два параметра, но это минимальные параметры, и это нормально иметь больше, но не меньше. Это в отличие от прямого высказывания int main (void), которое кричит на меня, поскольку эта функция не имеет параметров, что неверно, поскольку это так, они просто опущены.

вот мой базовый код:

./ образец у меня явно есть аргументы

функция явно имеет аргументы, переданные ей, несмотря на то, что она явно говорит, что это не происходит путем ввода void в прототип функции.

как eq-говорит выше:

(6.7.6.3p10) частный случай неназванного параметра типа void как единственный пункт в списке указывает, что функция не имеет параметров.

таким образом, говоря, что функция имеет void в качестве аргумента, но фактически имеет аргументы в стеке, является противоречием.

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

NOTE2: _argc, _pargv зависят от системы, чтобы найти ваши значения, вы должны найти их, запустив эту программу:

эти значения должны оставаться правильными для вашей конкретной системы.

Источник

int main() или int main(void)?

В чем разница между int main()<> и int main(void)<>?
Только недавно начал изучать язык, и появилось несколько вопросов: 1) в чем разница между int.

Какая разница между int main и void main?
какая разница между (int main) i (void main)?

в чем тогда разница

Только вот вопрос был о другом.

Добавлено через 3 минуты

Вообще-то, если говорить о С, а не о С++, то там была разница. Если прототип функции содержал просто пустые скобки, то компилятором никак не контролировалось, передаются ли в функцию параметры при вызове. Если же скобки в прототипе содержали void, попытка вызова функции с параметрами пресекалась на стадии компиляции.

Добавлено через 2 минуты
Ах ты чёрт, теперь и сам забыл, что речь идёт именно про main

в чем тогда разница

int main ()
И void main ()

Потому что в самой первой версии языка C, не было проверки аргументов функций и даже если у таковой были параметры, её прототип имел просто пустые скобки, то есть если передать функции при вызове например два параметра вместо трех, то программа упадет только в рантайме. C компиляторы интерпретируют пустые скобки как обьявление в старом стиле и проверки аргументов не будет, а если есть void то это говорит компилятору о том что функция не принимает никаких параметров, и если например попытатся вызвать эту функцию с аргументом, это вызовет ошибку.

P.S Мне кажется в цитате, говорится не о main..

Я создал специальный проект + добавил в него для тестирования ещё 3 параметра(как это сделал показал на скриншоте1,
причём с таким же успехом мы могли их передать программе через командную строку)

[Вот результат работы]

argv[0] : D:\Microsoft Visual Studio\CyberForum\TestParam\Debug\TestParam.exe
argv[1] : param2
argv[2] : param3
argv[3] : param4
Press any key to continue

PS:Как видишь если бы не исползовал функции по вылову параметров
argc = __p___argc();
argv = __p___argv();
то main() ничего бы не просигнализировал о параметрах переданных программе

Источник

Сказочный портал