C++ 为什么main()需要大括号?

C++ 为什么main()需要大括号?,c++,language-design,main,C++,Language Design,Main,我试了几种不同的方法 main() return; 或 得到了不同的误差,其中最奇特的是 /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 /usr/lib/gcc/i686 linux gnu/4.4.5/../../../.

我试了几种不同的方法

main() return;

得到了不同的误差,其中最奇特的是

/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 /usr/lib/gcc/i686 linux gnu/4.4.5/../../../../../../../../../../lib/crt1.o:在函数“\u start”中: (.text+0x18):未定义对“main”的引用 collect2:ld返回了1个退出状态 虽然一个程序只需要一条语句是很少见的,但为什么main()要求使用大括号呢


有人能解释一下为什么编译int main()时会出现如此奇怪的错误吗它不是main独有的——任何函数的主体都必须用大括号括起来。具体而言,§8.4/1将函数体定义为“复合语句”(对于真正学究来说,§6.3/1将复合语句定义为:“{statement seqopt}”。

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


你不能定义没有大括号的函数。

因为它是一个函数。它是语法的一部分。

你想说,void OneStatement()printf(“One Statement”);将是有效的函数定义。您的前提不正确。
main
或任何其他函数都不需要以大括号开头。这是一个有效的程序:
int main()try{throw 1;}catch(…){return 0;}
。(这被称为函数try块,除此之外,所有函数的主体都必须用大括号括起来,而不仅仅是
main
)。谢谢,我刚刚了解了try块。更不用说,我把大括号放在了透视图中。只需要一点额外的说明。你可以声明一个没有大括号的函数签名,即
void test()
但是,您必须在以后的某个地方使用大括号实现它。您将看到很多这样做的代码,特别是在类定义中,以尽量保持封装的真实性。 /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