-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
|
|||||||||||
1 | |||||||||||
int main() VS void main()29.04.2011, 17:18. Показов 42245. Ответов 36
Метки нет (Все метки)
Вот товарищ Герберт Шилдт считает, что функция main() должна вид
Но я лично симпатизирую варианту
Добавлено через 50 секунд Симпатизирую из-за компактности.
0
|
29.04.2011, 17:18 | |
Ответы с готовыми решениями:
36
В чем разница между int main(){} и int main(void){}? Какой новые синтаксис: int main() VS. void main() Какая разница между int main и void main? int main() или int main(void)? |
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
|
|
30.04.2011, 10:00 | 21 |
А я думаю так: Если пишешь для себя, можно и ставить пустой тип, но если пишешь программу не только для себя (если она будет как в никсах - взаимодействовать с пайпами), то тут без значения возвращаемого не обойтись. Допустим человек использует твою прогу (не программист, внутрь нее не лезет), пишет скрипт с пайпами, в одном из которых ставит первой твою прогу. Твоя прога натыкается на ошибку и не сообщает программам, стоящим далее по каналу. В итоге вся конструкция валится, все в канале работает неправильно, если вообще работает. А человек надеется на правильную работу. Это, так сказать, этика программиста - напиши так, чтобы потом другие не морочились с твоим детищем.
1
|
Kastaneda
|
30.04.2011, 10:54
#22
|
0
|
silent_1991
|
30.04.2011, 11:34
#23
|
Не по теме: Veyron, а я думаю так: писать правильно для других и неправильно для себя (в душе считая, что так лучше) - лицемерие и запутывание себя же самого.
2
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
30.04.2011, 12:03 | 24 |
Сообщение было отмечено как решение
Решение
А так же под прочими UNIX-like системами (знаете такую, в которой это не сработает - пожалуйста, назовите) и под виндой. Есть маргинальные экзотические системы, где и в байте не 8 бит, но так их ещё поискать надо...
Veyron, да можно и трусы через голову надевать - для себя же, к чёрту правила. А по поводу каналов - ерунда какая-то. Ну получит читающее приложение broken pipe, о чём сообщив корректно закроется (ну, если не "для себя" написано ).
3
|
30.04.2011, 15:26 | 25 |
В посте #5 было правильно написано на предмет того, что имеем по стандарту. В посте #15 ты возразил что "можно, а иногда и нужно" делать вот так. Я указал на то, что сие не по стандарту. На каких системах нет третьего параметра - я не знаю. Для выяснения этого надо смотреть конкретные реализации libc для конкретных систем. Но я не вижу особенной необходимости в использовании параметра envp, потому как для этих дел есть стандартный интерфейс getenv
0
|
-2 / 0 / 1
Регистрация: 24.04.2011
Сообщений: 55
|
|
30.04.2011, 21:21 [ТС] | 26 |
Вейрон, мне кажется. правильные вещи говорит.
Кстати, а кто тему переименовал %) Вроде она "Вопросом стиля" называлась..
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
30.04.2011, 21:23 | 27 |
стиль это использования табуляции/пробелов, выравниваний, именования переменных итп
это же вопрос как правильно/я так хочу
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||||||
30.04.2011, 21:24 | 28 | ||||||
ramses, и название её было не содержательным...
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
||||||
30.04.2011, 22:20 | 29 | |||||
Есть стандартный интерфейс, есть массив строк, передаваемый параметром. Что именно использовать - вот тут по-моему от ситуации зависит. По поводу стандартов - мелкомягкие вот считают, что envp - это их расширение стандарта ANSI (http://msdn.microsoft.com/en-u... 4fy6h.aspx). К тому же сильно сомневаюсь, что если вдруг найдётся система, в которой переменные окружения не передаются вызываемой программе, во всём идеально хоть какому-нибудь общеизвестному стандарту соответствует.
Да и getenv() / setenv() / etc... используют объявленную в unistd.h
да пишите хоть float main(). вы всё равно слышите только то, что хотите, переубеждать не будем.
1
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
30.04.2011, 22:26 | 30 |
unistd.h также нестандартен в смысле языка
кроме того может быть, а может и не быть, тут уж таинства CRT
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
30.04.2011, 22:44 | 31 |
Ну да, так же, как и windows.h например. Но только один из них с вероятностью 99.(9)% встретится в системе... А абсолютно переносимый код, использующий переменные окружения, написать всё равно не получится - переменные сами по себе в разных ОС различаются...
0
|
30.04.2011, 23:10 | 32 |
Используют-то используют, только попадает ли она в main третьим параметром - вопрос. И зачем гадать "найдётся или не найдётся", когда можно взять и использоват getenv, а уж каким макаром окружение дойдёт до getenv'а - это забота тех, кто libc реализовывал
0
|
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
|
|
30.04.2011, 23:20 | 33 |
В том-то и дело, что если программа не создана для пайпа, она не создаст ситуацию, сообщающую о падении канала. Она скажет, что все завершилось нормально (то есть ничего не скажет, но по идее для последующих программ может сказать, что все ОК), однако в вывод может послать мусор. И следующие в цепочке, не догадываясь ни о чем, будут работать с неверными данными.
0
|
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
|
|
30.04.2011, 23:40 | 35 |
Ну ладно, это пробелы все-таки в знании линя, надо локализовать.
Но все же если программа вызывается другой - тут же может присутствовать требование возврата корректного значения. Или я ошибаюсь?
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
01.05.2011, 11:10 | 37 |
Ну гадать, найдётся в системе unistd.h или windows.h долго не прийдётся, не нужно всё в кучу валить. А каким макаром "окружение дойдёт до getenv'а" запросто можно в сорцах откопать при желании. Но коль скоро выяснили, что и в винде, и в никсах есть третий параметр main(), которым передаются переменные окружения, не вижу ни одной причины этим не воспользоваться при необходимости. К примеру, как с помощью getenv вывести всё, что там в окружении передалось?
0
|
01.05.2011, 11:10 | |
01.05.2011, 11:10 | |
Помогаю со студенческими работами здесь
37
Почему в одних случаях пишут void main(), а в других случаях int main() {return 1;} От void main() к int main() Void main or Int main Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |