gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:43:51 25 4
gpt4 key购买 nike

举个最简单的例子:

#include <stdio.h>

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

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

g++  main.cpp -o main && ./main

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

g++  -O3 main.cpp -o main && ./main

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

此行为在 g++ 版本 10.3.1clang++ 版本 10.0.1 中是一致的。如果我添加返回语句或将函数的返回类型更改为 void,则不会发生无限循环。

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

最佳答案

您的函数被声明为 bool test(),但您的定义永远不会返回任何内容。这意味着您已经违反了该语言的契约(Contract),并且已经在未定义的行为领域中处于超时状态。在那里,所有结果都是“正确的”。

关于C++:如果缺少函数返回语句,for-loop 被优化为无限循环 - 编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68591212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com