我写了一个编译器,它已经可以正常工作了。它检查所有非 void 方法是否至少有一个 return 语句,但它不检查非 void 方法中的所有代码路径是否都返回一个值。因此,例如,如果我有以下代码:
int function(bool a)
{
if(a){
return 5;
}
}
它将编译“很好”,如果 a 为 false,控制将放弃该函数并继续执行该函数下定义的任何内容。
是否有某种算法可以用来执行此检查,以便我始终知道某个方法是否始终返回值?或者我需要重新发明轮子?
函数不能“脱离末端”并开始执行其范围之外的代码,无论它们是否返回值。允许最后的情况是很常见的return
对于不返回结果的函数(或者在某些不规范的语言中,即使是返回结果的函数),要省略语句,但函数在所有情况下都需要返回。
鉴于此,为最终失败的非 void 函数生成错误消息的最简单方法是:
在这种情况下,您需要删除不必要的return
在类型检查之前声明,否则你最终会得到很多不正确的错误消息。这需要一些控制流分析。
如果工作量太大,您可以通过编译无值在运行时发出错误消息return
在函数返回值的情况下,语句作为错误操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)