小编Ser*_*gey的帖子

C/C++:转到for循环

我有点不寻常的情况 - 我想使用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:感谢所有评论过的人!

  1. 对所有评论者:)是的,我明白我不能跳过局部变量的初始化器,我必须i在每次调用时保存/恢复.

  2. 关于强大的原因:)这段代码必须实现反向通信接口.反向通信是一种试图避免使用函数指针的编码模式.有时,它有它,因为预计你遗留代码中使用使用它.

不幸的是,r-comm-interface无法以很好的方式实现.您不能使用函数指针,也无法轻松地将工作拆分为多个函数.

c c++ compiler-construction goto

12
推荐指数
2
解决办法
9000
查看次数

标签 统计

c ×1

c++ ×1

compiler-construction ×1

goto ×1