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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.