Tag: 转到

C:堆栈内存,转到和“跳转到具有可变修改类型的标识符范围”,

我发现这拒绝编译: int test_alloc_stack(int size){ if(0) goto error; // same issue whatever conditional is used int apply[size]; give_values(apply,size); return 1; error: return 0; } 我得到的错误是:“跳转到具有可变修改类型的标识符范围”。 使用“goto”消除行并跳转到错误可以解决问题。 如果我使用动态分配进行应用,那么问题也会消失。 编译好: int test_alloc_heap(int size){ if(0) goto error; int * apply = calloc(sizeof(int),size); give_values(apply,size); free(apply); return 1; error : return 0; } 到底是怎么回事 ?

而(1)..打破而不是转到

我在C程序中找到了以下代码: while (1) { do_something(); if (was_an_error()) break; do_something_else(); if (was_an_error()) break; […] break; } [cleanup code] 这里while(1)用作“finally”的本地仿真。 你也可以用goto s写这个: do_something() if (was_an_error()) goto out; do_something_else() if (was_an_error()) goto out; […] out: [cleanup code] 我认为goto解决方案是一种常用的习惯用法。 我已经在内核源代码中看到过几次这种习惯用法,在Diomidis Spinellis的“代码阅读”一书中也提到了这一点。 我的问题是:什么解决方案更好? 有没有具体的理由使用while(1)解决方案? 问题943826没有回答我的问题。

C / C ++:GOTO比WHILE和FOR更快吗?

我知道,每个人都讨厌GOTO,没有人推荐它。 但那不是重点。 我只想知道,哪个代码最快: goto循环 int i=3; loop: printf(“something”); if(–i) goto loop; while循环 int i=3; while(i–) { printf(“something”); } for循环 for(int i=3; i; i–) { printf(“something”); }

在实现无限循环时,使用while(1)vs for(;;)vs goto(在C中)是否存在差异?

在实现无限循环时,使用while(1) vs for(;;) vs goto是否有区别? 谢谢,陈兹

c99转到过去的初始化

在调试崩溃时,我在一些代码中遇到了这个问题: int func() { char *p1 = malloc(…); if (p1 == NULL) goto err_exit; char *p2 = malloc(…); if (p2 == NULL) goto err_exit; … err_exit: free(p2); free(p1); return -1; } 第一个malloc失败时会出现此问题。 因为我们跳过p2的初始化,它包含随机数据,并且对free(p2)的调用可能会崩溃。 我希望/希望这将与C ++中的方式相同,其中编译器不允许goto跳过初始化。 我的问题:是跳过标准允许的初始化还是这是gcc实现c99的错误?