为什么不能用标签结束while循环?

时间:2018-07-15 12:37:05

标签: c++ goto

代替写作

while()
{
 lbl:
}

你必须写

while()
{
 lbl:;
}

为什么?这对我来说没有任何意义。即使在循环中有实际的代码也是如此

1 个答案:

答案 0 :(得分:0)

如果您使用C进行编码,因为C11标准对此进行了定义。通过阅读n1570,第6.8.1节进行检查。顺便说一句,C的其他标准也有类似的规则。

如果您使用C ++进行编码,则因为C ++ 11标准对此进行了定义。通过阅读n3337,第6.1节进行检查。顺便说一句,C ++的其他标准也有类似的规则。

直觉上,标签与 statement 有关,并且右花括号不是语句(而是块终止符)。分号(单独使用时)将结束一个空(或null)语句。

如果您对该规则不满意,请随意使用其他编程语言或定义自己的编程语言(并可能通过compiling it到C来实现)。也许您可以研究Scheme(先读SICP,然后再读R5RS)及其call/cc原语(与普通goto相比,是另一种更强大的控制原语)

您也可以游说C ++(或C)标准委员会来更改规则。实际上,这需要享誉全球并需要多年的全职工作(否则,他们不会认真考虑您的建议)。在编写更改C ++标准的建议之前,请务必学习得很好,并提供您的想法的示例实现。

许多C ++实现都是free software(例如GCCClang)。您可以研究它们并加以改进(至少在您的fork中;但是请务必遵守他们的open-source license)。但是,有很多代码段(源代码有数百万行),因此您将需要数年才能理解它们。

请记住,编程语言是一种规范(不是软件),它不仅定义了syntax,而且还定义了semantics