C 中 Main 的递归调用:进入未定义领域的旅程
下面呈现的令人困惑的代码片段激发了编程社区的好奇心:
int main () { return main(); }
令许多人惊讶的是,这段代码编译成功。然而,它的执行揭示了一个有趣的行为:它无限期地运行。这种奇特的观察结果引发了人们对底层机制的疑问。
调用 Main 的困境
C 标准在 [basic.start.main] p3 中明确声明“函数 main 不应由表达式命名。”这种禁止源于 main 作为程序入口点的性质,运行时库调用一次。不允许对 main 进行任何后续调用,因此缺少命名表达式。
编译器行为和未定义行为
根据 [intro.compliance.general],编译器的职责是从格式良好的程序生成可执行代码。虽然它可能会提供警告或错误,但并不需要强制执行所有规则。在这种特殊情况下,编译器可以自行决定对调用 main 的违规行为做出不同的反应。
拥抱未知
最终,对此行为的决定性判决代码片段属于未定义行为的范围。根据标准的定义,当发生未定义的行为时,任何事情都可能发生。试图合理化此类结果是徒劳的,因为后果是完全不可预测的。
总之,虽然所提供代码的语法有效,但其执行会导致未定义的行为。最好注意标准禁止命名表达式调用 main 的规定,以免您的程序踏上不可预测的未知旅程。
以上是为什么在 C 中递归调用'main()”会导致未定义的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!