我有一个不太寻常的情况 - 我想使用goto语句来跳转到循环内部,而不是跳出循环。
有很充分的理由这样做 - 这段代码必须是某个函数的一部分,该函数在第一次调用后进行一些计算,返回请求新数据并需要再次调用才能继续。函数指针(显然的解决方案)无法使用,因为我们需要与不支持函数指针的代码进行互操作。
我想知道下面的代码是否安全,即它将被所有符合标准的C/C++编译器正确编译(我们需要同时支持C和C++)。
function foo(int not_a_first_call, int *data_to_request, ...other parameters... )
{
if( not_a_first_call )
goto request_handler;
for(i=0; i<n; i++)
{
*data_to_request = i;
return;
request_handler:
...process data...
}
}
我已经研究了一些标准,但是关于这种用法并没有太多的信息。我也想知道是否将 for 替换为等价的 while 是否从可移植性角度有益。
谢谢提前。
更新: 感谢所有评论者!
对于所有评论者 :) 是的,我明白我不能跳过局部变量的初始化器,并且每次调用都必须保存/恢复
i
。关于强制理由 :) 这段代码必须实现反向通信接口。反向通信是一种编码模式,试图避免使用函数指针。有时必须使用它,因为旧代码期望您 会 使用它。
不幸的是,反向通信接口无法以良好的方式实现。您不能使用函数指针,也不能轻松地将工作拆分为几个函数。