为什么无法访问的代码不是C ++中的错误?

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

#include  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语句之后的语句永远不会被执行? 允许无法访问的代码的原因是什么?

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

警告而不是错误是有道理的。 提到它是好的,因为人们可能无意中遗留了旧代码,但无论如何都没有理由不编译。

无法访问的代码是一个警告,因为不需要它是一个错误,此外,它不能总是很容易避免。

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

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