我正在为编译器编写一个标记器。我有一个循环遍历字符,然后检查某些条件的开关。然后我需要退出这两个块来写令牌:可接受使用标签和'goto'?
Token token;
while (peekChar() != '\0')
{
switch (c = nextChar())
{
case '(':
token = Token(TOKEN_LEFT_PAREN, currentLine);
goto MakeToken;
// ... every other character, some with lots of logic
}
}
MakeToken:
// write the token
这是可以接受的标签使用,还是有更好的方法吗?我已经学会认为标签只是一种可怕的做法,但是肯定必须有它们的用途(或者它们不会在标准中实施?)。谢谢。
goto语句只是为了与旧的代码库的兼容性支持。我不建议goto声明或标签。使用goto语句打破了程序结构,通常一个goto语句是出现其他goto语句的原因。:) –
标签是一种工具。他们既不好也不坏。如果有意义,请使用它们,如果它们没有使用,请使用它们。 – immibis