我尝试了几种变体
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()时错误是如此奇特;?
答案 0 :(得分:8)
它不是唯一的 - 任何函数的主体必须用大括号包围。特别是§8.4/ 1将 function-body 定义为“复合语句”(对于真正迂腐的§6.3/ 1,将复合语句定义为: “{statement-seq opt }”。
答案 1 :(得分:8)
因为你定义了一个名为main()
的函数,函数定义基本上是一个函数声明(int main()
部分),后跟一个复合语句({ /* ... */ }
部分)(你可以也使用函数try块,但这些很少使用,仍然需要大括号)。
如果没有大括号,您无法定义任何功能。
答案 2 :(得分:5)
因为它是一种功能。这是语法的一部分。
答案 3 :(得分:2)
因为C ++标准说所有带有主体的函数都必须有大括号。这就是标准定义的方式,无论好坏。