Tag: 转到

kbhit()双循环不能正常工作

只是为了好玩,我尝试用循环打印kbhit() ,以便按下按键后的程序无限打印该行,直到再次按下键盘。 它编译得很好,在运行时,只是给出了空白屏幕。 没有打印。 但是在单键按下结束程序。 虽然控制台没有关闭。 #include #include int main() { while(1) { if(kbhit()) { while(1) { if(kbhit()) { goto out; } printf(“Print Ed Infinitum Until Key Press”); } } } out: return 0; } 我该如何解决这个问题?

转到不使用?:C中的运算符

出于学习目的,我编写了以下代码片段: for(int i=0;i<10;i++) { for(int j = 0;j<5;j++) { //(i==j && i==3)? (goto found) : printf("stya here\n"); if(i==j && i==3){goto found;} else {printf("stay here\n");} } } found: printf("yes I am here"); 但我想知道我什么时候发现内部循环中的省略语句没有给出错误,现在我很困惑if-else并不总是可以用?:运算符替换。 这是什么事实? 为什么评论语句会出错?

如何使用goto模拟C中的exception?

我在C中编写并发事务库,发现了以下问题。 让我们考虑一个示例事务成员伪代码,其中“transaction”表示与事务主机的通信通道: transaction = trans_join(); do_some_ops(); /* receive the data from the master */ trans_rcv(transaction, data); do_some_ops(); trans_send(transaction, answer); /* wait for the possibility for voting */ trans_ready(transaction); /* vote for commiting and wait for the voting results. */ if(trans_commit(answer)) { printf(“Final commiting the changes.\n”); } else { printf(“Rolling back the changes.\n”); } 在并发交易中,我们只有在要求主人投票时才能投票。 但是,主服务器可以随时调用trans_abort(member) […]

C89计算goto(再次)如何

我需要编写一个自动机代码,我碰到了这个计算goto的旧需求(ala fortran4 :)) 我需要在便携式ansi-C中对此进行编码。 我想远离“不要那样做”,远离longjmp / setjmp,远离嵌入式ASM(),远离非ansi-C扩展。 有谁知道如何做到这一点?

在C中使用GOTO作为FSM

我在C中创建了一个有限状态机。我从硬件角度(HDL语言)学习了FSM。 所以我使用了一个每个状态一个case的switch 。 我还想在编程时应用Separation of Concerns概念。 我的意思是我想得到这个流程: 根据当前状态和输入标志计算下一个状态 validation下一个状态(如果用户请求不允许的转换) 允许时处理下一个状态 作为开始,我实现了3个函数:static e_InternalFsmStates fsm_GetNextState(); static bool_t fsm_NextStateIsAllowed(e_InternalFsmStates nextState); static void fsm_ExecuteNewState(e_InternalFsmStates); 目前它们都包含一个大的开关盒,它是相同的: switch (FSM_currentState) { case FSM_State1: […] break; case FSM_State2: […] break; default: […] break; } 既然它有效,我想改进代码。 我知道在3个函数中我将执行交换机的相同分支。 所以我想以这种方式使用goto : // // Compute next state // switch (FSM_currentState) { case FSM_State1: next_state = THE_NEXT_STATE goto […]

将转到标签暴露给符号表

我想知道是否可以将函数中的goto标签暴露给C / C ++中的符号表 例如,我想从符号表中生成以下代码段的ret标签,并且可以使用标准API(如dlsym())进行引用。 感谢您的帮助! #include int main () { void *ret_p = &&ret; printf(“ret: %p\n”, ret_p); goto *ret_p; return 1; ret: return 0; }

使用goto跳过变量声明?

我正在阅读C编程 – KNKing 的现代方法来学习C编程语言,并且注意到goto语句不能跳过变长数组声明。 但现在问题是:为什么goto跳转允许跳过​​固定长度数组声明和普通声明? 更确切地说,根据C99标准,这些例子的行为是什么? 当我测试这些案例时,似乎声明实际上没有被跳过,但这是正确的吗? 声明可能已跳过的变量是否可以安全使用? 1。 goto later; int a = 4; later: printf(“%d”, a); 2。 goto later; int a; later: a = 4; printf(“%d”, a); 3。 goto later; int a[4]; a[0] = 1; later: a[1] = 2; for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) printf("%d\n", a[i]);

在不同的function中使用Gotofunction

如何在不同的函数中使用goto函数。例如, main() { …. REACH: …… } void function() { goto REACH ; } 如何实现这样的用法?

如何将goto标签存储在数组中然后跳转到它们?

我想声明一个“jumplabels”数组。 然后我想跳到这个数组中的“jumplabel”。 但我不知道该怎么做。 它应该类似于以下代码: function() { “gotolabel” s[3]; s[0] = s0; s[1] = s1; s[2] = s2; s0: …. goto s[v]; s1: …. goto s[v]; s2: …. goto s[v]; } 有谁知道如何执行此操作?

GOTO认为是无害的

在几个SO讨论中已经对goto声明进行了长时间的讨论(见此和那个 ),我当然不想重振那些激烈的争论。 相反,我想集中讨论goto的一个用例并讨论它的价值和可能的替代方案。 考虑以下代码片段,这在(至少我自己的)FSM中很常见: while (state = next_state()) { switch (state) { case foo: /* handle foo, and finally: */ if (error) goto cleanup; break; case bar: /* handle bar, and finally: */ if (error) goto cleanup; break; /* …other cases… */ } } return ok; cleanup: /* do some cleanup, ie free() local heap […]