为什么main()需要括号?

时间:2011-02-28 05:41:19

标签: c++ language-design main

我尝试了几种变体

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 个答案:

答案 0 :(得分:8)

它不是唯一的 - 任何函数的主体必须用大括号包围。特别是§8.4/ 1将 function-body 定义为“复合语句”(对于真正迂腐的§6.3/ 1,将复合语句定义为: “{statement-seq opt }”。

答案 1 :(得分:8)

因为你定义了一个名为main()的函数,函数定义基本上是一个函数声明(int main()部分),后跟一个复合语句({ /* ... */ }部分)(你可以也使用函数try块,但这些很少使用,仍然需要大括号)。

如果没有大括号,您无法定义任何功能。

答案 2 :(得分:5)

因为它是一种功能。这是语法的一部分。

答案 3 :(得分:2)

因为C ++标准说所有带有主体的函数都必须有大括号。这就是标准定义的方式,无论好坏。