【问题标题】:Why does main() require braces?为什么 main() 需要大括号?
【发布时间】:2011-02-28 05:41:18
【问题描述】:

我尝试了几种变化

main() return;

main() if();

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

/usr/lib/gcc/i686-linux-gnu/4.4.5/../../../../lib/crt1.o:在函数`_start'中: (.text+0x18): undefined reference to `main' collect2: ld 返回 1 个退出状态

虽然程序只需要一个语句并不常见,但为什么 main() 要求有大括号?

有人能解释一下为什么只编译 int main(); 时错误如此奇怪吗?

【问题讨论】:

  • 你是想说,void OneStatement() printf("One Statement");将是一个有效的函数定义。
  • 你的前提不正确。 main 或任何其他函数都不需要以大括号开头。这是一个有效的程序:int main() try { throw 1; } catch (...) { return 0; }。 (这称为函数尝试块,除此之外,所有函数的主体必须用大括号括起来,而不仅仅是main的)。

标签: c++ language-design main


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我刚刚了解了 try 块。更不用说,我把大括号放在透视图中。
  • 只是一点额外的说明。您可以声明一个不带大括号的函数签名,即void test();,但是,您必须稍后使用大括号在某个地方实现它。你会看到很多这样做的代码,尤其是在类定义中,以尽量保持封装的真实性。
【解决方案2】:

它不是 main 独有的——任何函数的主体都必须用大括号括起来。具体而言,§8.4/1 将 function-body 定义为“复合语句”(对于真正迂腐的人,§6.3/1 将 compound-statement 定义为: "{ 语句序列opt }".

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2014-08-09
        • 2014-02-10
        • 2013-05-05
        • 1970-01-01
        • 2019-10-27
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多