败犬日报 2024-11-28
1. 无副作用的死循环是 UB(未定义行为)吗
cpp
#include <iostream>
int main() {
while (1)
;
}
void unreachable() {
std::cout << "Hello World!" << std::endl;
}
这是 clang 的一个 bug,clang 没给 main 生成一行代码,导致 main 函数地址和下面那个函数重叠了。现在已经修了。
那么无副作用的死循环是 UB 吗,这个之前一直有争议,p2809r0 已经确定不是 UB 了。https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2809r0.html
2. main 不写 return
没问题,默认返回 0。
https://zh.cppreference.com/w/cpp/language/main_function 有记载:
main 函数的函数体不需要包含 return 语句:当控制达到 main 函数体的末尾而未遇到返回语句时,它的效果是执行
return 0;
。