小编net*_*ent的帖子

C++:如果缺少函数返回语句,for 循环被优化为无限循环 - 编译器错误?

以以下最小示例为例:

#include <stdio.h>

bool test(){
    for (int i = 0; i < 1024; i++)
    {
        printf("i=%d\n", i);
    }
}
int main(){
    test();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

test函数中的 return 语句丢失的地方。如果我像这样运行示例:

g++  main.cpp -o main && ./main
Run Code Online (Sandbox Code Playgroud)

然后循环在 1024 次迭代后中止。但是,如果我在打开优化的情况下运行示例:

g++  -O3 main.cpp -o main && ./main
Run Code Online (Sandbox Code Playgroud)

然后这是优化的,我得到一个无限循环。

此行为在g++version10.3.1clang++version之间保持一致10.0.1。如果我添加 return 语句或将函数的返回类型更改为void.

我很好奇:这会被认为是编译器错误吗?或者这是可以接受的,因为缺少 return 语句是未定义的行为,因此我们失去对这个函数中发生的事情的所有保证?

c++ compiler-optimization internal-compiler-error

3
推荐指数
1
解决办法
82
查看次数