gpt4 book ai didi

c++ - 为什么没有返回语句时没有任何编译器错误?

转载 作者:IT老高 更新时间:2023-10-28 22:25:31 24 4
gpt4 key购买 nike

与 Java 不同,在 C/C++ 中允许:

int* foo ()
{
if(x)
return p;

// What if control reaches here?
}

这通常会导致崩溃并且很难调试问题。为什么标准不强制对非void函数有一个final return? (编译器会为错误的 return 值生成错误。)

在 GCC 或 MSVC 中有标志吗?强制执行? (类似于 -Wunused-result)

最佳答案

这是不允许的(未定义的行为)。但是,在这种情况下,该标准不需要诊断。

标准不要求最后一个语句是 return 因为这样的代码:

while (true) {
if (condition) return 0;
}

这总是返回 0,但愚蠢的编译器看不到它。请注意,该标准不强制要求智能编译器。 while block 之后的 return 语句将是一种浪费,愚蠢的编译器无法优化。该标准不想要求程序员编写废代码只是为了满足愚蠢的编译器。

g++ -Wall 足够聪明,可以在我的机器上发出诊断信息。

关于c++ - 为什么没有返回语句时没有任何编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260917/

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