【发布时间】:2015-01-01 20:57:09
【问题描述】:
我编写了一个已经可以正常工作的编译器。它检查所有非 void 方法是否至少有一个 return 语句,但它不检查非 void 方法中的所有代码路径是否都返回一个值。因此,例如,如果我有以下代码:
int function(bool a)
{
if(a){
return 5;
}
}
它将编译“正常”,如果 a 为 false,控制将放弃该函数并继续执行该函数下定义的任何内容。
是否有一些算法可以用来执行此检查,以便我始终知道某个方法是否始终返回一个值?还是我需要重新发明轮子?
【问题讨论】:
-
对于很多编译器技巧,已经有可用的算法,包括推荐的内部表示等。参见例如en.wikipedia.org/wiki/Data-flow_analysis阅读现有编译器的相同语言的注释源代码(在你的情况下看起来像
C,所以选择stackoverflow.com/questions/584714/…)可能是self-answer你原本不清楚和广泛的问题的最佳方式
标签: compiler-construction compilation