LINUX.ORG.RU

[C++] main


0

1

Разбираюсь и не могу понять. Написано:

В программе обязательно должна присутствовать ф-я main:

int main()
{
 ...
 return 0;
}

А что, возвращать лишние сущности и писать лишнюю строку обязательно?

void main()
{
 ...
}

Нигде в книге про это не сказано, вот и понять не могу.

лишние сущности

Это не лишняя сущность, а код возврата. Позволяет системе понять успешно ли завершилась программа.

Raving_Zealot ★★ ()

возвращаемое значение в main() - это код завершения программы. main() обязана возвращать int по стандарту.

alex_custov ★★★★★ ()

В gcc - обязаельно. MSVC допускает void main().

Norgat ★★★★★ ()

Нигде в книге про это не сказано, вот и понять не могу.

Вот видишь (это к вопросу о качестве книг из предыдущего твоего треда). А Страуструп пишет в разделе 3.2:

Целое значение, возвращаемое main(), предназначается для системы. Ненулевое значение, возвращённое main(), означает аварийное завершение.

Так что, не все книги одинаково полезны.

OldFatMan ()

Регулярно появляющийся вопрос…

Deleted ()

Посмотрите хотя бы в википедии какие прототипы main бывают.

возвращать лишние сущности

Значение есть по-любому, так как оно в регистре eax/rax.

писать лишнюю строку обязательно?

Не обязательно.

Booster ★★ ()

А что, возвращать лишние сущности и писать лишнюю строку обязательно?

Это не лишняя сущность, но писать return 0 необязательно, в C++ (не С!) main по-умолчанию возвращает 0.

stack_protector ()
Ответ на: комментарий от stack_protector

> в C++ (не С!) main по-умолчанию возвращает 0.

> не С!

> !

ISO/IEC 9899:1999

5.1.2.2.3 Program termination

<…> reaching the } that terminates the main function returns a value of 0. <…>

arsi ★★★★★ ()

> А что, возвращать лишние сущности и писать лишнюю строку обязательно?

sounds like «а что, следовать стандартам обязательно?» ;)

arsi ★★★★★ ()
Ответ на: комментарий от OldFatMan

Так что, не все книги одинаково полезны.

Страуструп для начинающего просто вреден. Новичку нужно сначала рассказать простые вещи, создать целостную картину языка и его взможностей, а затем уже лезть в детали... Страуструп сразу лезет в детали, не создав сколько-нибудь целостного представления о языке.

Для новичка я бы порекомендовал Эккеля «Философию C++» первую часть. Сам читал в электронном виде. Там постепенно идет погружение в возможности C++, таким образом к концу книги исходную задачу переписывают раза 3, постепенно применяя изучаемые возможности.

anonymous ()
Ответ на: комментарий от arsi

sounds like «а что, следовать стандартам обязательно?» ;)

Следовать стандартам часто необязательно. Это зависит от задачи и результата, который надо получить, от сложившейся практики и много чего еще...

anonymous ()
Ответ на: комментарий от anonymous

Согласен, просто ТС в Talks создавал тему про подбор книг для изучения С++.

Там ему советовали (и я в т.ч.) и Липпмана, и Эккеля, и Шилдта (у меня к нему старая неприязнь, но меня убеждали, что последняя книга по С++ неплоха). Ну и Страуструпа тоже. Здесь я просто привёл пример того, что в рекомендуемых (ранее в Talks-теме) книгах есть то, что зачастую игнорируют авторы ...мнэээ... ну скажем, «менее глубоких» книг.

На всякий случай - тот топик

OldFatMan ()
Ответ на: комментарий от anonymous

Дополнение:

Сам я начинал именно со Страуструпа. Но - на тот момент у меня был многолетний опыт кодинга на С. Поэтому затруднений с восприятием С++ было немного. Возможно, поэтому с моей точки зрения Страуструп несложен (имею в виду первую половину книги). А для новичка С++ с нуля в изложении Страуструпа м.б. и «перебор».

OldFatMan ()

лишние сущности

ТС, если ты угорел по Оккаму, то дочитай хотя бы до границ применимости, ведь когда в руках бритва, все вокруг подозрительно начинает напоминать сущности.

AptGet ★★★ ()
Ответ на: комментарий от AptGet

основная масса авторов по С++ вообще упоротые стараются задачу решить с максимальным применением плюшек С++ это бред хороший архитектор выкидывает все ненужное а тут наоборот стараются впихнуть все что есть обучая новичков простую задачу решающать тонной конструкций ненужных хоть бы оговаривались что в реальной жихни все совсем не так и не надо лепить все что знаеш в каждую задачу мое имхо надо начинать с чистого Си тогда вырабатывается вкус к чистому и минимальному коду и потом переходя на С++ даже мысли не возникает пихать все плюшки C++ в каждую задачу правильное отношение к С++ как к инструменту появляется

anonymous ()
Ответ на: комментарий от arsi

действительно, gcc даже ворнингов не выдаёт:

$ echo 'int main(){}' |gcc -xc -std=c99 -Wall -Wextra -pedantic -
$

anonymous ()
Ответ на: комментарий от anonymous

Страуструп для начинающего просто вреден.

Есть новая книжка Страуструпа как раз для начинающих. Весьма неплоха на первый взгляд. Сам не читал от начала до конца, но пролистал и прочитал пару глав и поставил на полку. Собственно купил только из-за того, чтобы получить на неё автограф автора на его лекции =) Но ИМХО для начинающего самое то.

DELIRIUM ☆☆☆☆☆ ()

А что, возвращать лишние сущности и писать лишнюю строку обязательно?

1. Люди в шелл-скриптах обычно анализируют код возврата. Не разочаровывай их.

2. Одна строка кода на фоне десятков тысяч уже ничего не значит. Да и зачастую ты захочешь в main() ловить исключения, строка лишней не будет.

Manhunt ★★★★★ ()

Ну вообще немного странно то что код возврата из main - это для кого-то такая серьезная проблема при программировании на С++, что затмевает все остальные.

PS: Как насчет такого? Я помню какой-то чел раздул флейм на несколько экранов в comp.lang.c++, что такой вариант работает на всех компиляторах, а стандарт - фуфло.

void main() { exit(0); }

Absurd ★★★ ()

Однажды на олимпиаде написал void, оно начало возвращать мусор в регистре eax. Система тестирования естественно начала ставить диагноз - runtime error. Вывод - харош былокодить, возвращать нужно 0

vertexua ★★★★☆ ()
Ответ на: комментарий от Absurd

Ну вообще немного странно то что код возврата из main - это для кого-то такая серьезная проблема при программировании на С++, что затмевает все остальные.

Made my day! В квотезы

vertexua ★★★★☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.