下面的代码片段引起了程序员的疑问:
int main () { return main(); }
编译没有错误但无法终止执行,导致对其行为的猜测。
未定义的行为: main之谜
根据C标准,[basic.start.main](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018 /p0689r2.html#3.6.1) 指出“函数 main 不应由表达式命名。”这意味着禁止在程序中调用 main。
编译器行为:警告还是沉默?
编译器可能会以不同的方式处理这种特定情况。启用 -pedantic 选项的 GCC 会发出有关非法使用 main 的警告。然而,Visual Studio 保持沉默,选择不警告代码的递归性质。
调用 main 时会发生什么?
这个问题的答案属于未定义行为的范围。该标准没有定义在程序中调用 main 时会发生什么。因此,任何观察到的行为都是不可预测的并且依赖于实现。
结论
在程序中调用 main 是一个未定义的操作,并且无法可靠地预测其行为。编译器可能会以不同的方式处理这种情况,发出警告或完全编译失败。试图定义未定义行为的结果是徒劳的,并且可能会导致意想不到的和潜在危险的结果。
以上是为什么递归调用 `main()` 会导致 C 中未定义的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!