这可以被视为goto的可接受使用吗?

时间:2015-07-07 03:34:16

标签: c goto

我知道goto可能有用的地方很少,例如嵌入式for循环或多个函数退出点的清理。我想知道这是否是一个可以接受的地方。

我正在构建一个正则表达式引擎,并使用switch语句来处理输入的每个字符。任何不是元字符的东西都会转到开关的default

当我读取反斜杠(\)时,我希望下一个字符被转义并处理为文字,即直接跳转到交换机的default情况。所以我认为通过添加另一个标签来goto只是默认情况可以吗?或者我应该按常规方式将其分成一个函数?

for(const char* c = regex; *c; c++){
    if(*c == '\\' && *++c)
        goto literal;
    switch(*c){
        case '|':
            ...
        case '*':
            ...
            ...
        default: literal:
            ...
    }
}

1 个答案:

答案 0 :(得分:5)

它至少是半合法的,但你可以很容易地编写基本相同的代码,而不是for (const char* c = regex; *c; c++) { switch (*c) { case '|': ... case '*': ... ... case '\\': if (*++c == '\0') …report backslash followed by null, probably an error… /*FALLTHROUGH*/ default: ... } }

case

请注意,原始版本switch中需要'\0'来处理反斜杠,然后是EOS({{1}})。