Форум программистов, компьютерный форум CyberForum.ru

int main() VS void main() - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.83
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 17:18     int main() VS void main() #1
Вот товарищ Герберт Шилдт считает, что функция main() должна вид

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

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

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

Добавлено через 50 секунд
Симпатизирую из-за компактности.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
29.04.2011, 17:24     int main() VS void main() #2
Ну в первом случае - это main - это главная функция, которая, по - хорошему, должна что-то возвращать! В данном случае, это 0, будем считать его кодом завершения программы!
Во втором случае - это подпрограмма, которая может ничего не возвращать, а просто что-то делать!
(выразился своими словами)
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 17:29  [ТС]     int main() VS void main() #3
Витают в голове примерно те же противоречивые рассуждения)
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
29.04.2011, 17:33     int main() VS void main() #4
Ну это, как бы, истина!

Добавлено через 44 секунды
Я, лично, изпользую
C++
1
2
3
4
int main()
{
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.04.2011, 17:37     int main() VS void main() #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
void main() - НЕ СТАНДАРТНО. Запомните это и думайте головой.
Единственные корректные сигнатуры main - это int main() и int main(int argc, char* argv[]).
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 17:47  [ТС]     int main() VS void main() #6
"Думать головой" - в Вашем понимании, это неукоснительное соблюдение стандартов? А в моём - как раз наоборот)) Что плохого в void main ?

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

А кто сказал, что она должна что-то возвращать?
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,945
29.04.2011, 17:48     int main() VS void main() #7
Плохого в том, что если она не будет работать, то это ваши проблемы.
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 17:50  [ТС]     int main() VS void main() #8
Так она же работает %)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.04.2011, 17:52     int main() VS void main() #9
ramses, Стандарт это сказал. Несоответствии стандарту - это быдлокод, который ведет к непереносимости кода на другой компилятор.
Конечно на каком-нибудь borlande это работает, да подчас и на MSVS работает. Но стандарт говорит, что void main() - НЕ корректно.
Люльчик
 Аватар для Люльчик
1 / 1 / 0
Регистрация: 28.04.2011
Сообщений: 178
29.04.2011, 17:54     int main() VS void main() #10
[QUOTE=ramses;1599499]"Думать головой" - в Вашем понимании, это неукоснительное соблюдение стандартов? А в моём - как раз наоборот)) Что плохого в void main ?

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

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

P.S. или я ничего не поняла?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.04.2011, 19:08     int main() VS void main() #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
void main() VS int main()
Есть язык, в языке есть правила! Русский язык - тоже язык, со своими правилами. Теперь представим сообщение на форуме, написаное вапреки всем правилам русково езыка при этом афтар поста ничево плохово в написаном нивидит (подумаиш не по правилам).
Лично я, когда перечитывал верхнюю строчку, чуть глаза себе не сломал) Это я к тому, что: "стоит ли следовать стандарту (читай "правилу") языка".
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
29.04.2011, 19:26  [ТС]     int main() VS void main() #12
Правила - одно, а стиль - другое. Если нечто явно не запрещено, то, следовательно, оно разрешено. Так я рассуждаю %) Как перестанет работать - тогда другое дело.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.04.2011, 19:32     int main() VS void main() #13
Цитата Сообщение от ramses Посмотреть сообщение
Если нечто явно не запрещено, то, следовательно, оно разрешено.
А вот g++ такое не компилирует, говорит:
Bash
1
shit.cpp:2: error: ‘::main’ must return ‘int’
g++ знает, что такое "стандарт" )
получается: "что не разрешено, то запрещено"
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
29.04.2011, 19:33     int main() VS void main() #14
ramses, странный вы человек все-таки)
не первая тема такая, вам говорят как нужно делать, как принято, но вы всеравно стоите на своем.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.04.2011, 19:42     int main() VS void main() #15
Цитата Сообщение от 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(){}
извращение и ни один вменяемый компилятор С/С++ такое не пропустит.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.04.2011, 19:52     int main() VS void main() #16
Не-а! Вот так тоже можно, мало того - порой нужно даже!

C
1
int main(int argc, char ** argv, char ** envp) {}
Пруф со ссылкой на стандарт (до С99) пожалста.
Или хотя бы пункт и цитату.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.04.2011, 19:54     int main() VS void main() #17
Цитата Сообщение от 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)
пятьбукв
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.04.2011, 20:10     int main() VS void main() #18
Kastaneda, Спасибо
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
30.04.2011, 09:12  [ТС]     int main() VS void main() #19
"ramses, странный вы человек все-таки)"

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

З.Ы. Visual C++ пропускает, гад..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2011, 09:34     int main() VS void main()
Еще ссылки по теме:

C++ Ошибка при компиляции In function"int main()"; expected ';', before "cin", [Build Error] [main.o] Error 1
Какой новые синтаксис: int main() VS. void main() C++
C++ В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.?

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
30.04.2011, 09:34     int main() VS void main() #20
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ramses Посмотреть сообщение
Рассудите)
Когда вызываешь malloc, то по хорошему надо бы проверить результат на NULL. Но это не обязаловка. Когда вызываешь free, то по хорошему надо бы после этого обнулить указатель, но это не обязаловка. С main'ом то же самое. Ты будешь экономить 10 символов в исходнике до тех пор, пока не промудо...ешься полдня и не поймёшь, что иногда лучше лишний раз написать лишних 10 символов, чем терять много времени на поиск ошибки. А потому пиши так, как считаешь уместным. Человек должен учиться на собственных ошибках. Есть пословица "дурак учится на своих ошибках, а умный - на чужих", но она не всегда себя оправдывает

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

Цитата Сообщение от easybudda Посмотреть сообщение
Не-а! Вот так тоже можно, мало того - порой нужно даже!
Сие есть системо-зависимый код. Под линуксом действительно третьим параметром передаётся окружение. Но так не на всех системах
Yandex
Объявления
30.04.2011, 09:34     int main() VS void main()
Ответ Создать тему
Опции темы

Текущее время: 18:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru