为什么无法访问的代码不是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