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

Why unreachable code isn't an error in C++?

本文关键字:C++ 错误 代码 访问 为什么      更新时间:2023-10-16

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

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

用警告代替错误是有意义的。提到这一点很好,因为可能无意中留下了旧代码,但无论如何也没有理由不进行编译。

不可达的代码是一个警告,因为它不需要是一个错误,而且,它也不是总能轻易避免的。

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

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