我的任务是编写一个将代码编译为简化C的编译器。只允许我使用goto语句和条件if-goto语句。我的目标代码(C)中的代码行开始加载。
我的问题是:可以使用这些限制以某种方式实现功能吗?我正在寻找类似汇编语言的call之类的东西。这是我的代码现在看起来像的一个小例子。
int main() {
int arraySize = someInt;
int index = someInt;
if(index>=arraySize) goto ERROR;
if(index<0) goto ERROR;
// At the end of the file
goto END;
ERROR:
// Handle error here
END:
return 0;
}
现在,每当执行索引检查时,就会编写两行代码。我知道最常见的方法是创建一个将arraySize和index作为参数的函数。有没有一种方法可以仅使用gotos来实现这一点,从而使代码的执行可以从原来的位置继续进行(有点像调用)?
这是我的目标代码的实际用法。在这里您可以清楚地理解我的意思。
i7=realloc(i7,sizeof(int)*i6);
i8=1;
i0=0;
if(i0>=i6) goto ERROR;
if(i0<0) goto ERROR;
i7[i0]=i8;
i8=2;
i0=1;
if(i0>=i6) goto ERROR;
if(i0<0) goto ERROR;
i7[i0]=i8;
i8=0;
i0=2;
if(i0>=i6) goto ERROR;
if(i0<0) goto ERROR;
i7[i0]=i8;
i8=25;
i0=5;
if(i0>=i6) goto ERROR;
if(i0<0) goto ERROR;
i7[i0]=i8;
i8=9;
i0=7;
if(i0>=i6) goto ERROR;
if(i0<0) goto ERROR;
i7[i0]=i8;