Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.83
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
#1

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

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

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

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

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

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

Добавлено через 50 секунд
Симпатизирую из-за компактности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2011, 17:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос int main() VS void main() (C++):

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

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

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

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

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

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

36
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.04.2011, 19:52 #16
Не-а! Вот так тоже можно, мало того - порой нужно даже!

C
1
int main(int argc, char ** argv, char ** envp) {}
Пруф со ссылкой на стандарт (до С99) пожалста.
Или хотя бы пункт и цитату.
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
29.04.2011, 19:54 #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)
пятьбукв
2
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.04.2011, 20:10 #18
Kastaneda, Спасибо
0
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
30.04.2011, 09:12  [ТС] #19
"ramses, странный вы человек все-таки)"

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

З.Ы. Visual C++ пропускает, гад..
0
Evg
Эксперт CАвтор FAQ
18246 / 6371 / 438
Регистрация: 30.03.2009
Сообщений: 17,628
Записей в блоге: 28
30.04.2011, 09:34 #20
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ramses Посмотреть сообщение
Рассудите)
Когда вызываешь malloc, то по хорошему надо бы проверить результат на NULL. Но это не обязаловка. Когда вызываешь free, то по хорошему надо бы после этого обнулить указатель, но это не обязаловка. С main'ом то же самое. Ты будешь экономить 10 символов в исходнике до тех пор, пока не промудо...ешься полдня и не поймёшь, что иногда лучше лишний раз написать лишних 10 символов, чем терять много времени на поиск ошибки. А потому пиши так, как считаешь уместным. Человек должен учиться на собственных ошибках. Есть пословица "дурак учится на своих ошибках, а умный - на чужих", но она не всегда себя оправдывает

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

Цитата Сообщение от easybudda Посмотреть сообщение
Не-а! Вот так тоже можно, мало того - порой нужно даже!
Сие есть системо-зависимый код. Под линуксом действительно третьим параметром передаётся окружение. Но так не на всех системах
4
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
30.04.2011, 10:00 #21
А я думаю так: Если пишешь для себя, можно и ставить пустой тип, но если пишешь программу не только для себя (если она будет как в никсах - взаимодействовать с пайпами), то тут без значения возвращаемого не обойтись. Допустим человек использует твою прогу (не программист, внутрь нее не лезет), пишет скрипт с пайпами, в одном из которых ставит первой твою прогу. Твоя прога натыкается на ошибку и не сообщает программам, стоящим далее по каналу. В итоге вся конструкция валится, все в канале работает неправильно, если вообще работает. А человек надеется на правильную работу. Это, так сказать, этика программиста - напиши так, чтобы потом другие не морочились с твоим детищем.
1
Kastaneda
30.04.2011, 10:54
  #22

Не по теме:

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

0
silent_1991
30.04.2011, 11:34
  #23

Не по теме:

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

2
easybudda
Модератор
Эксперт CЭксперт С++
9694 / 5644 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
30.04.2011, 12:03 #24
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Evg Посмотреть сообщение
Сие есть системо-зависимый код. Под линуксом действительно третьим параметром передаётся окружение. Но так не на всех системах
А так же под прочими UNIX-like системами (знаете такую, в которой это не сработает - пожалуйста, назовите) и под виндой. Есть маргинальные экзотические системы, где и в байте не 8 бит, но так их ещё поискать надо...


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

Кстати, а кто тему переименовал %) Вроде она "Вопросом стиля" называлась..
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
30.04.2011, 21:23 #27
Цитата Сообщение от ramses Посмотреть сообщение
Вроде она "Вопросом стиля" называлась..
стиль это использования табуляции/пробелов, выравниваний, именования переменных итп
это же вопрос как правильно/я так хочу
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.04.2011, 21:24 #28
ramses, и название её было не содержательным...

 Комментарий модератора 
Именуйте темы осмысленно! Название темы должно максимально полно отражать её содержимое, о как!
0
easybudda
Модератор
Эксперт CЭксперт С++
9694 / 5644 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
30.04.2011, 22:20 #29
Цитата Сообщение от Evg Посмотреть сообщение
Но я не вижу особенной необходимости в использовании параметра envp, потому как для этих дел есть стандартный интерфейс getenv
Есть стандартный интерфейс, есть массив строк, передаваемый параметром. Что именно использовать - вот тут по-моему от ситуации зависит. По поводу стандартов - мелкомягкие вот считают, что envp - это их расширение стандарта ANSI (http://msdn.microsoft.com/en-us/library/k104fy6h.aspx). К тому же сильно сомневаюсь, что если вдруг найдётся система, в которой переменные окружения не передаются вызываемой программе, во всём идеально хоть какому-нибудь общеизвестному стандарту соответствует.
Да и getenv() / setenv() / etc... используют объявленную в unistd.h
C
1
extern char **environ;
не сложно догадаться, что бы это могло быть...


Цитата Сообщение от ramses Посмотреть сообщение
Вейрон, мне кажется. правильные вещи говорит.
да пишите хоть float main(). вы всё равно слышите только то, что хотите, переубеждать не будем.
1
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
30.04.2011, 22:26 #30
Цитата Сообщение от easybudda Посмотреть сообщение
Да и getenv() / setenv() / etc... используют объявленную в unistd.h
C
1
extern char **environ;
не сложно догадаться, что бы это могло быть...
unistd.h также нестандартен в смысле языка
кроме того может быть, а может и не быть, тут уж таинства CRT
0
30.04.2011, 22:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2011, 22:26
Привет! Вот еще темы с ответами:

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

Использование int или void в качестве возвращаемого типа для main() - C++
Когда использовать int main, а когда void main?

Что и почему дописать в int main() чтобы функция void вернула значение - C++
Что и почему дописать в int main() чтобы функция void вернула значение? #include <stdio.h> #include <math.h> #include <iostream.h>...

В каком случае надо начинать с int main() или с int _tmain( int argc, _TCHAR* argv[] ) и т.д.? - C++
Не понимаю, с чего начинать. Заранее спс.


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru