我有点不寻常的情况 - 我想使用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...
}
}
Run Code Online (Sandbox Code Playgroud)
我已经研究过标准,但是关于这种用例的信息并不多.我也想知道是否更换为等效,同时将但从便携性点有益的.
提前致谢.
UPD:感谢所有评论过的人!
对所有评论者:)是的,我明白我不能跳过局部变量的初始化器,我必须i在每次调用时保存/恢复.
关于强大的原因:)这段代码必须实现反向通信接口.反向通信是一种试图避免使用函数指针的编码模式.有时,它有它,因为预计你遗留代码中使用会使用它.
不幸的是,r-comm-interface无法以很好的方式实现.您不能使用函数指针,也无法轻松地将工作拆分为多个函数.