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

时间:2015-05-26 11:24:09

标签: c++ c unreachable-code

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:1)

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

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

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