Почему main () требует фигурные скобки? - PullRequest
2 голосов
/ 28 февраля 2011

Я перепробовал несколько вариантов на

main() return;

или

main() if();

и получил разные ошибки, наиболее характерной из которых было

/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status

Хотя это необычнодля программы, требующей только одного оператора, почему main () требует наличия фигурных скобок?

Может кто-нибудь объяснить, почему ошибка была настолько своеобразной при компиляции только int main () ;?

Ответы [ 4 ]

8 голосов
/ 28 февраля 2011

Это не уникально для main - тело любой функции должно быть заключено в фигурные скобки.В частности, §8.4 / 1 определяет тело-функции как «составной оператор» (а для действительно педантичного, §6.3 / 1 определяет составной оператор как: «{Statement-seq opt } ".

8 голосов
/ 28 февраля 2011

Поскольку вы определяете функцию с именем main(), а определение функции - это, по сути, объявление функции (часть int main()), за которой следует составной оператор (часть { /* ... */ }) (вы также можете использовать блок try функции, но они очень редко используются и все еще требуют скобок).

Вы не можете определить любую функцию без скобок.

5 голосов
/ 28 февраля 2011

Потому что это функция.Это часть синтаксиса.

2 голосов
/ 28 февраля 2011

Поскольку стандарт C ++ говорит, что все функции с телом должны иметь фигурные скобки. Так определяется стандарт, к лучшему или к худшему.

...