6

无法访问的代码是 Java 等语言中的编译时错误。但为什么它只是在 C++ 和 C 中发出警告?考虑以下示例:

#include <iostream>
int f()
{ 
    int a=3;
    return a;
    int b=6;       // oops it is unreachable code
    std::cout<<b;  // program control never goes here
}
int main()
{
    std::cout<<f()<<'\n';
}

编译器不应该在这个程序中抛出错误,因为函数 f() 中的 return 语句之后的语句将永远不会被执行?允许无法访问代码的原因是什么?

4

2 回答 2

16

Unreachable code 在 C++ 中不是编译错误,但通常会给出警告,具体取决于您的编译器和标志。如果编译器在检测到无法访问的代码时停止,那么调试代码的选项就会减少,因为您还必须手动删除不必要的代码。

警告而不是错误是有意义的。很高兴有人提到它可能无意中留下了旧代码,但无论如何都没有理由不编译。

于 2015-05-26T11:28:01.587 回答
4

无法访问的代码是一个警告,因为它没有必要成为错误,此外,它总是不能轻易避免。

  • 从宏扩展的代码或检查常量可能会导致代码无法访问。
  • 代码是否可以访问取决于预处理器定义(例如,常见的跨平台开发)。
  • 生成的代码可能会导致无法在生成阶段检测到的代码。

此外,如果您希望这是一个错误,GCC 和 Clang 支持-Wunreachable-code,所以您可以使用-Werror=unreachable-code

于 2017-09-14T04:28:59.220 回答