相关疑难解决方法(0)

为什么不能在switch语句中声明变量?

我一直想知道这一点 - 为什么你不能在switch语句中的case标签之后声明变量?在C++中,您可以在任何地方声明变量(并且声明它们接近第一次使用显然是一件好事)但是以下仍然不起作用:

switch (val)  
{  
case VAL:  
  // This won't work
  int newVal = 42;  
  break;
case ANOTHER_VAL:  
  ...
  break;
}  
Run Code Online (Sandbox Code Playgroud)

以上给出了以下错误(MSC):

'case'标签跳过'newVal'的初始化

这似乎也是其他语言的限制.为什么会出现这样的问题?

c++ switch-statement

910
推荐指数
11
解决办法
26万
查看次数

在支持循环和函数的语言中使用'goto'是否有利?如果是这样,为什么?

我长期以来一直认为,goto如果可能的话,永远不应该使用它.在前几天阅读libavcodec(用C语言编写)时,我注意到它的多种用途.goto在支持循环和函数的语言中使用是否有利?如果是这样,为什么?

c language-agnostic exception-handling goto

194
推荐指数
15
解决办法
5万
查看次数

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;
}
Run Code Online (Sandbox Code Playgroud)

第一个malloc失败时会出现问题.因为我们跳过初始化p2,它包含随机数据和调用可能free(p2)会崩溃.

我希望/希望这将与C++中的方式相同,其中编译器不允许goto跳过初始化.

我的问题:是跳过标准允许的初始化还是这是gcc实现c99的错误?

c gcc goto c99

22
推荐指数
3
解决办法
3241
查看次数