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

int main() VS void main()

29.04.2011, 17:18. Показов 43802. Ответов 36
Метки нет (Все метки)

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

C++
1
2
3
int main() {
    return 0;
}
Т.е. в случае удачи выполнения программы должен возвращаться ноль.

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

C++
1
2
3
void main() {
    ...
}
Рассудите)

Добавлено через 50 секунд
Симпатизирую из-за компактности.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2011, 17:18
Ответы с готовыми решениями:

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

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

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

36
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
29.04.2011, 17:24
Ну в первом случае - это main - это главная функция, которая, по - хорошему, должна что-то возвращать! В данном случае, это 0, будем считать его кодом завершения программы!
Во втором случае - это подпрограмма, которая может ничего не возвращать, а просто что-то делать!
(выразился своими словами)
0
-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 17:29  [ТС]
Витают в голове примерно те же противоречивые рассуждения)
0
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
29.04.2011, 17:33
Ну это, как бы, истина!

Добавлено через 44 секунды
Я, лично, изпользую
C++
1
2
3
4
int main()
{
    return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.04.2011, 17:37
Лучший ответ Сообщение было отмечено как решение

Решение

void main() - НЕ СТАНДАРТНО. Запомните это и думайте головой.
Единственные корректные сигнатуры main - это int main() и int main(int argc, char* argv[]).
3
-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 17:47  [ТС]
"Думать головой" - в Вашем понимании, это неукоснительное соблюдение стандартов? А в моём - как раз наоборот)) Что плохого в void main ?

"Ну в первом случае - это main - это главная функция, которая, по - хорошему, должна что-то возвращать!"

А кто сказал, что она должна что-то возвращать?
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
29.04.2011, 17:48
Плохого в том, что если она не будет работать, то это ваши проблемы.
0
-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 17:50  [ТС]
Так она же работает %)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.04.2011, 17:52
ramses, Стандарт это сказал. Несоответствии стандарту - это быдлокод, который ведет к непереносимости кода на другой компилятор.
Конечно на каком-нибудь borlande это работает, да подчас и на MSVS работает. Но стандарт говорит, что void main() - НЕ корректно.
2
 Аватар для Люльчик
1 / 1 / 0
Регистрация: 28.04.2011
Сообщений: 178
29.04.2011, 17:54
[QUOTE=ramses;1599499]"Думать головой" - в Вашем понимании, это неукоснительное соблюдение стандартов? А в моём - как раз наоборот)) Что плохого в void main ?

Добавлено через 2 минуты
Цитата Сообщение от Mиxaил Посмотреть сообщение
Ну в первом случае - это main - это главная функция, которая, по - хорошему, должна что-то возвращать!

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

P.S. или я ничего не поняла?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
29.04.2011, 19:08
Лучший ответ Сообщение было отмечено как решение

Решение

void main() VS int main()
Есть язык, в языке есть правила! Русский язык - тоже язык, со своими правилами. Теперь представим сообщение на форуме, написаное вапреки всем правилам русково езыка при этом афтар поста ничево плохово в написаном нивидит (подумаиш не по правилам).
Лично я, когда перечитывал верхнюю строчку, чуть глаза себе не сломал) Это я к тому, что: "стоит ли следовать стандарту (читай "правилу") языка".
4
-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 19:26  [ТС]
Правила - одно, а стиль - другое. Если нечто явно не запрещено, то, следовательно, оно разрешено. Так я рассуждаю %) Как перестанет работать - тогда другое дело.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
29.04.2011, 19:32
Цитата Сообщение от ramses Посмотреть сообщение
Если нечто явно не запрещено, то, следовательно, оно разрешено.
А вот g++ такое не компилирует, говорит:
Bash
1
shit.cpp:2: error: ‘::main’ must return ‘int’
g++ знает, что такое "стандарт" )
получается: "что не разрешено, то запрещено"
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
29.04.2011, 19:33
ramses, странный вы человек все-таки)
не первая тема такая, вам говорят как нужно делать, как принято, но вы всеравно стоите на своем.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
29.04.2011, 19:42
Цитата Сообщение от ForEveR Посмотреть сообщение
Единственные корректные сигнатуры main - это int main() и int main(int argc, char* argv[]).
Не-а! Вот так тоже можно, мало того - порой нужно даже!
C
1
int main(int argc, char ** argv, char ** envp) {}

ramses, нравится вам это, или нет, но функция main() таки должна возвращать целое значение. При чём обычно 0 - удачное завершение программы, число отличное от нуля - ошибка. Если не поставить
C
1
return 0;
или
C
1
2
3
4
5
#include <stdlib.h>
int main(void){
/*... */
exit(0);
}
или ещё каким нибудь образом возвращаемый код завершения программы, компилятор сам об этом позаботится. Но как-то правильнее всё-таки возвращать его самому. А вот
C
1
void main(){}
извращение и ни один вменяемый компилятор С/С++ такое не пропустит.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.04.2011, 19:52
Не-а! Вот так тоже можно, мало того - порой нужно даже!

C
1
int main(int argc, char ** argv, char ** envp) {}
Пруф со ссылкой на стандарт (до С99) пожалста.
Или хотя бы пункт и цитату.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
29.04.2011, 19:54
Цитата Сообщение от http://en.wikipedia.org/wiki/Main_function
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:

C++
1
int main(int argc, char **argv, char **envp)
Mac OS X and Darwin have a fourth parameter containing arbitrary OS-supplied information, such as the path to the executing binary:

C++
1
int main(int argc, char **argv, char **envp, char **apple)
пятьбукв
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
29.04.2011, 20:10
Kastaneda, Спасибо
0
-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
30.04.2011, 09:12  [ТС]
"ramses, странный вы человек все-таки)"

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

З.Ы. Visual C++ пропускает, гад..
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.04.2011, 09:34
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от ramses Посмотреть сообщение
Рассудите)
Когда вызываешь malloc, то по хорошему надо бы проверить результат на NULL. Но это не обязаловка. Когда вызываешь free, то по хорошему надо бы после этого обнулить указатель, но это не обязаловка. С main'ом то же самое. Ты будешь экономить 10 символов в исходнике до тех пор, пока не промудо...ешься полдня и не поймёшь, что иногда лучше лишний раз написать лишних 10 символов, чем терять много времени на поиск ошибки. А потому пиши так, как считаешь уместным. Человек должен учиться на собственных ошибках. Есть пословица "дурак учится на своих ошибках, а умный - на чужих", но она не всегда себя оправдывает

Цитата Сообщение от Kastaneda Посмотреть сообщение
А вот g++ такое не компилирует, говорит
g++ - это всё-таки язык Си++ с более жёсткими стандартами, чем в Си, где в этом отношении полный бардак

Цитата Сообщение от easybudda Посмотреть сообщение
Не-а! Вот так тоже можно, мало того - порой нужно даже!
Сие есть системо-зависимый код. Под линуксом действительно третьим параметром передаётся окружение. Но так не на всех системах
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2011, 09:34
Помогаю со студенческими работами здесь

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

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

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

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; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru