代码之家  ›  专栏  ›  技术社区  ›  B. A. Sylla

从望远镜跳下

  •  -1
  • B. A. Sylla  · 技术社区  · 6 年前

    是否可以从未命名的范围跳转?

    void MyFunc() {
        {
            ... // Code
    
            if (!head_size) {
                goto _common_error; // <- break and continue don't work here
            }
    
            ... // Code
    
            if (!tail_size) {
                goto _common_error; // second time
            }
    
            ... // Code
        }
    
        _common_error:
        {
            ... // Code
        }
    }
    

    我的问题不是是否可以重新设计,而是c++中是否有我不知道的技巧。

    Update1:将word命名空间更改为作用域

    1 回复  |  直到 6 年前
        1
  •  2
  •   geza    6 年前

    是的,你需要使用 goto 跳出范围。

    break 只能用于跳出循环或开关。

    但是你可以通过使用一个虚拟循环来使用一个(可疑的)技巧:

    void MyFunc() {
        do {
            ... // Code
    
            if (!head_size) {
                break;
            }
    
            ... // Code
    
            if (!tail_size) {
                break;
            }
    
            ... // Code
        } while (false);
    
        {
            ... // Error handling code
        }
    }