Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/329: Рейтинг темы: голосов - 329, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 29.09.2015
Сообщений: 27

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

03.10.2015, 00:35. Показов 65382. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
какая разница между (int main) i (void main)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2015, 00:35
Ответы с готовыми решениями:

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

Какой новые синтаксис: int main() VS. void main()
Долго не занимался программированием , но тут жена решила поучится , да и сам повторить ,так вот столкнулся с такой темой на 4pda может...

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

12
81 / 25 / 19
Регистрация: 27.10.2014
Сообщений: 420
03.10.2015, 00:36
int main обязан возвращать целочисленное значение, void ничего не возвращает

C++
1
2
3
int main()
{  return 0;  }
void main() {}
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
03.10.2015, 00:42
разница в том что
C++
1
void main()
запрещен стандартом
программа обязана возвращать код завершения системе
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.10.2015, 00:52
Цитата Сообщение от valeriy007 Посмотреть сообщение
int main обязан возвращать целочисленное значение, void ничего не возвращает
не верно
Цитата Сообщение от ValeryS Посмотреть сообщение
программа обязана возвращать код завершения системе
не верное

а теперь правильный ответ:

по стандарту должент быть int main

void main - расширение компилятора вижал студии.
но такой код не портируем. гсс его уже кушать не будет, например.

при этом сама функция main не обязана возвращать значение:

C++
1
2
3
4
int main()
{
    return 0; //<--- это не обязательно писать
}
по стандарту,
если программист явным образом не напишет возвращаемое значение,
программа вернет ноль.

C++
1
void main()//<--- вернет ноль
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
03.10.2015, 00:59
Цитата Сообщение от hoggy Посмотреть сообщение
void main()//<--- вернет ноль
серьезно?
Цитата Сообщение от hoggy Посмотреть сообщение
по стандарту,
если программист явным образом не напишет возвращаемое значение,
программа вернет ноль.
и как это расходится с
Цитата Сообщение от ValeryS Посмотреть сообщение
программа обязана возвращать код завершения системе
а написал программист return или не написал это дело десятое
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
03.10.2015, 01:11
Цитата Сообщение от hoggy Посмотреть сообщение
если программист явным образом не напишет возвращаемое значение,
программа вернет ноль.
но это не значит, что она ничего не возвращает.
Цитата Сообщение от ValeryS Посмотреть сообщение
программа обязана возвращать код завершения системе
например, вернет результат в mainCRTStartup, а не в систему

Цитата Сообщение от hoggy Посмотреть сообщение
по стандарту должент быть int main
по стандарту реализация должна поддерживать два вида, всё остальное на усмотрение разработчиков и не переносимо.

An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:
0
1 / 1 / 0
Регистрация: 17.02.2021
Сообщений: 2
17.02.2021, 16:06
Чёт много поспорили, а на вопрос так и не ответили.
Что использовать то лучше и в каких ситуациях?
Не просто копипаста теории, а на практике.
0
 Аватар для VLaDoS_2001a
319 / 216 / 114
Регистрация: 14.05.2020
Сообщений: 890
17.02.2021, 16:16
Seralet, всегда int main()
1
1 / 1 / 0
Регистрация: 17.02.2021
Сообщений: 2
17.02.2021, 16:16
Вот в одном из блогов нашёл (сослаться не знаю на кого т.к. пользователь Anonymous):
Функция main() обязательна для простых консольных приложений, которые мы разрабатываем в Академии в качестве множества примеров и заданий. Однако как оказалось существует существенная разница в ее употреблении. Ее могут записывать по-разному: int main() и void main().
Однако запись приведенная выше не будет корректна без записи return 0 для int main() и exit(0) для void main(). На одном из форумов встретил сообщение, что void mai() не совсем корректная запись, так как сообщает компилятору, что функция main() не возвращает никакого значения. При этом запись int main() сообщает компилятору о возвращении целочисленного значения, которое необходимо операционной системе. Это сообщение объявляет ей о том, что программа завершилась корректно. Если же это значение не возвращено, то операционная система понимает, что программа завершилась в аварийном режиме. Именно поэтому как первая запись, так и вторая требует записи операторов return 0 для int main() или для void main() – записи оператора exit(0).
Однако в языке С++ предпочтение при записи функции отдается целочисленному значению, что выглядит вот так:
int main()
{
return 0;
}
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
17.02.2021, 16:17
Цитата Сообщение от Seralet Посмотреть сообщение
Не просто копипаста теории, а на практике.
вам всё разжевали. void main стандартом не запрещён, но делает программу непереносимой.
короче говоря, используйте версию main, которая определена стандартом.
то бишь int main.
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
17.02.2021, 17:24
Посмотрите код ASM при компиляции:
1. Для void main():
Оба следующих однакова с возвращаемым значением 0:
C++
1
2
3
void main()
{
}
Или
C++
1
2
3
4
void main()
{
    return;
}
Потому что компилятор возникло код ASM как:
Assembler
1
xor eax, eax
Т.е. регистрация eax=0 (это именно будет возвращаемым значением функции main().
2. Для int main():
При компиляции обязательно определить возвращаемое значение функции !
Если оно равно 0, то код ASM тоже так:
Assembler
1
xor eax, eax
При этом eax=0.
Но если оно равно другому x, то код ASM соответственно как
Assembler
1
mov eax, x
Т.е. eax=x.

Вывод: они не совсем очень различны ! Все будут всегда получать возвращаемое значение, но int будет нужно определенное значение возвращения, а void будет автоматически возвращать значение (всегда равно 0).

Я понял так. По-русски немного знаю, поэтому немного говорю еще !

Добавлено через 5 минут
Цитата Сообщение от Seralet Посмотреть сообщение
Чёт много поспорили, а на вопрос так и не ответили.
Что использовать то лучше и в каких ситуациях?
Не просто копипаста теории, а на практике.
По-моему все равно !
2
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.02.2021, 17:42
Цитата Сообщение от Seralet Посмотреть сообщение
Однако запись приведенная выше не будет корректна без записи return 0 для int main()
return 0 в main не обязателен и подразумевается "по-умолчанию".
C++
1
2
3
4
int main() {
   //вернет 0, если нет явной инструкции return.
   //это обязательное требование стандарта языка
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
17.02.2021, 20:19
Цитата Сообщение от valeriy007 Посмотреть сообщение
int main обязан возвращать целочисленное значение
int main НЕ обязан явно возвращать значение.

Цитата Сообщение от Seralet Посмотреть сообщение
Что использовать то лучше и в каких ситуациях?
"Луше" для чего? Ясно же написали: никой осязаемой практической разницы нет (если компилятор промолчит), но при этом стандартным вариантом является int main. В такой ситуации выбор ясен: всегда и везде int main, разумеется.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2021, 20:19
Помогаю со студенческими работами здесь

Почему в одних случаях пишут void main(), а в других случаях int main() {return 1;}
Препод мне доказывает, что void в main`е писать неправильно, а объяснить не может почему. Кто расскажет?)

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

int main() VS void main()
Вот товарищ Герберт Шилдт считает, что функция main() должна вид int main() { return 0; } Т.е. в случае удачи выполнения...

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

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() {double a, b, x; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru