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

int main() VS void main()

29.04.2011, 17:18. Показов 43835. Ответов 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
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
30.04.2011, 10:00
Студворк — интернет-сервис помощи студентам
А я думаю так: Если пишешь для себя, можно и ставить пустой тип, но если пишешь программу не только для себя (если она будет как в никсах - взаимодействовать с пайпами), то тут без значения возвращаемого не обойтись. Допустим человек использует твою прогу (не программист, внутрь нее не лезет), пишет скрипт с пайпами, в одном из которых ставит первой твою прогу. Твоя прога натыкается на ошибку и не сообщает программам, стоящим далее по каналу. В итоге вся конструкция валится, все в канале работает неправильно, если вообще работает. А человек надеется на правильную работу. Это, так сказать, этика программиста - напиши так, чтобы потом другие не морочились с твоим детищем.
1
30.04.2011, 10:54

Не по теме:

Цитата Сообщение от Veyron Посмотреть сообщение
напиши так, чтобы потом другие не морочились с твоим детищем.
Еще такое видел:"Помни, твой код может поддерживать склонный к насилию психопат, который знает, где ты живешь!" :D

0
30.04.2011, 11:34

Не по теме:

Veyron, а я думаю так: писать правильно для других и неправильно для себя (в душе считая, что так лучше) - лицемерие и запутывание себя же самого.

2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
30.04.2011, 12:03
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Evg Посмотреть сообщение
Сие есть системо-зависимый код. Под линуксом действительно третьим параметром передаётся окружение. Но так не на всех системах
А так же под прочими UNIX-like системами (знаете такую, в которой это не сработает - пожалуйста, назовите) и под виндой. Есть маргинальные экзотические системы, где и в байте не 8 бит, но так их ещё поискать надо...


Veyron, да можно и трусы через голову надевать - для себя же, к чёрту правила. А по поводу каналов - ерунда какая-то. Ну получит читающее приложение broken pipe, о чём сообщив корректно закроется (ну, если не "для себя" написано ).
3
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.04.2011, 15:26
Цитата Сообщение от easybudda Посмотреть сообщение
А так же под прочими UNIX-like системами (знаете такую, в которой это не сработает - пожалуйста, назовите) и под виндой. Есть маргинальные экзотические системы, где и в байте не 8 бит, но так их ещё поискать надо...
В посте #5 было правильно написано на предмет того, что имеем по стандарту. В посте #15 ты возразил что "можно, а иногда и нужно" делать вот так. Я указал на то, что сие не по стандарту. На каких системах нет третьего параметра - я не знаю. Для выяснения этого надо смотреть конкретные реализации libc для конкретных систем. Но я не вижу особенной необходимости в использовании параметра envp, потому как для этих дел есть стандартный интерфейс getenv
0
-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
30.04.2011, 21:21  [ТС]
Вейрон, мне кажется. правильные вещи говорит.

Кстати, а кто тему переименовал %) Вроде она "Вопросом стиля" называлась..
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
30.04.2011, 21:23
Цитата Сообщение от ramses Посмотреть сообщение
Вроде она "Вопросом стиля" называлась..
стиль это использования табуляции/пробелов, выравниваний, именования переменных итп
это же вопрос как правильно/я так хочу
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
30.04.2011, 21:24
ramses, и название её было не содержательным...

 Комментарий модератора 
Именуйте темы осмысленно! Название темы должно максимально полно отражать её содержимое, о как!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
30.04.2011, 22:20
Цитата Сообщение от Evg Посмотреть сообщение
Но я не вижу особенной необходимости в использовании параметра envp, потому как для этих дел есть стандартный интерфейс getenv
Есть стандартный интерфейс, есть массив строк, передаваемый параметром. Что именно использовать - вот тут по-моему от ситуации зависит. По поводу стандартов - мелкомягкие вот считают, что envp - это их расширение стандарта ANSI (http://msdn.microsoft.com/en-u... 4fy6h.aspx). К тому же сильно сомневаюсь, что если вдруг найдётся система, в которой переменные окружения не передаются вызываемой программе, во всём идеально хоть какому-нибудь общеизвестному стандарту соответствует.
Да и getenv() / setenv() / etc... используют объявленную в unistd.h
C
1
extern char **environ;
не сложно догадаться, что бы это могло быть...


Цитата Сообщение от ramses Посмотреть сообщение
Вейрон, мне кажется. правильные вещи говорит.
да пишите хоть float main(). вы всё равно слышите только то, что хотите, переубеждать не будем.
1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
30.04.2011, 22:26
Цитата Сообщение от easybudda Посмотреть сообщение
Да и getenv() / setenv() / etc... используют объявленную в unistd.h
C
1
extern char **environ;
не сложно догадаться, что бы это могло быть...
unistd.h также нестандартен в смысле языка
кроме того может быть, а может и не быть, тут уж таинства CRT
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
30.04.2011, 22:44
Цитата Сообщение от alex_x_x Посмотреть сообщение
unistd.h также нестандартен в смысле языка
Ну да, так же, как и windows.h например. Но только один из них с вероятностью 99.(9)% встретится в системе... А абсолютно переносимый код, использующий переменные окружения, написать всё равно не получится - переменные сами по себе в разных ОС различаются...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.04.2011, 23:10
Цитата Сообщение от easybudda Посмотреть сообщение
К тому же сильно сомневаюсь, что если вдруг найдётся система, в которой переменные окружения не передаются вызываемой программе, во всём идеально хоть какому-нибудь общеизвестному стандарту соответствует.
Да и getenv() / setenv() / etc... используют объявленную в unistd.h
Используют-то используют, только попадает ли она в main третьим параметром - вопрос. И зачем гадать "найдётся или не найдётся", когда можно взять и использоват getenv, а уж каким макаром окружение дойдёт до getenv'а - это забота тех, кто libc реализовывал
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
30.04.2011, 23:20
Цитата Сообщение от easybudda Посмотреть сообщение
Ну получит читающее приложение broken pipe, о чём сообщив корректно закроется (ну, если не "для себя" написано ).
В том-то и дело, что если программа не создана для пайпа, она не создаст ситуацию, сообщающую о падении канала. Она скажет, что все завершилось нормально (то есть ничего не скажет, но по идее для последующих программ может сказать, что все ОК), однако в вывод может послать мусор. И следующие в цепочке, не догадываясь ни о чем, будут работать с неверными данными.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
30.04.2011, 23:32
Veyron, при организации pipe код возврата не учитывается
0
 Аватар для Veyron
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
30.04.2011, 23:40
Цитата Сообщение от Evg Посмотреть сообщение
Veyron, при организации pipe код возврата не учитывается
Ну ладно, это пробелы все-таки в знании линя, надо локализовать.
Но все же если программа вызывается другой - тут же может присутствовать требование возврата корректного значения. Или я ошибаюсь?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
01.05.2011, 08:47
Цитата Сообщение от Veyron Посмотреть сообщение
Но все же если программа вызывается другой - тут же может присутствовать требование возврата корректного значения
Ну собственно, именно для этого код возврата и нужен
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
01.05.2011, 11:10
Цитата Сообщение от Evg Посмотреть сообщение
И зачем гадать "найдётся или не найдётся", когда можно взять и использоват getenv, а уж каким макаром окружение дойдёт до getenv'а - это забота тех, кто libc реализовывал
Ну гадать, найдётся в системе unistd.h или windows.h долго не прийдётся, не нужно всё в кучу валить. А каким макаром "окружение дойдёт до getenv'а" запросто можно в сорцах откопать при желании. Но коль скоро выяснили, что и в винде, и в никсах есть третий параметр main(), которым передаются переменные окружения, не вижу ни одной причины этим не воспользоваться при необходимости. К примеру, как с помощью getenv вывести всё, что там в окружении передалось?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.05.2011, 11:10
Помогаю со студенческими работами здесь

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 <iostream> #include <math.h> using namespace std; int main() {double a, b, x; ...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru