考虑这个C代码:
#include <stdio.h>;
int main(void) {
puts("Hello, world!");; ;
;
return 0; ;
; ;
};
在这里,我几乎可以随处可见分号。只是为了有趣。但令人惊讶it worked!我收到了关于分号后分号的警告,但其他绝对错误的分号也起作用了。如果我忘记在puts
之后添加分号,我将收到以下错误
错误:预期&#39;;&#39;之前&#39;返回&#39;
为什么没有大量错误和无用的分号会导致错误?在我看来,它们应该被视为语法错误。
答案 0 :(得分:10)
单个分号构造空语句。它不仅合法,在某些情况下也很有用,例如,while
/ for
循环不需要真实的身体。一个例子:
while (*s++ = *t++)
;
C11 6.8.3表达式和空语句
null语句(仅由分号组成)不执行任何操作。
唯一的语法错误是这一行:
#include <stdio.h>;
答案 1 :(得分:5)
分号表示语句的结尾是否为空。没有分号意味着你没有关闭/结束最后一个语句但是启动了一个给出错误的新语句。分号过多表示每个空白语句结束。所以,它没有给出错误
答案 2 :(得分:1)
为什么空语句应该是错误?事实并非如此。
答案 3 :(得分:0)
int a;;;;;
(语句分隔符)始终用于指定特定语句的结束。在下一个语句执行之后。
如果您没有放置分隔符,那么它将考虑使用当前语句的下一个语句并执行。这给出了一个合成错误。
但在其他情况下,当我们放置多个分界符时,例如:
int a
在这种情况下,我们有5个语句,其中int main()
{
int a=0 ;,;
return 0;
}
是第一个语句,接下来的四个语句是编译期间编译器将删除的空语句。
查看此问题的一些有趣案例:
int main()
{
int a=0 ,; /*change done*/
return 0;
}
当我们更改上面的程序时,它仍然有效:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim intr As Range, t As String
Set intr = Intersect(Range("D:D"), Target)
If intr Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each r In intr
t = Replace(Replace(r.Text, "-", ""), " ", "")
r.Value = "'" & Replace(Replace(t, ")", ""), "(", "")
Next r
Application.EnableEvents = True
End Sub
答案 4 :(得分:0)
;
是C中的语句分隔符,如上面的答案中所述。 Rahul的答案是完全正确的,只是你可以看到this回答一个问题,该问题询问为什么C语句以分号结尾。因此,当你理解为什么使用分号时,你就会明白当你输出太多分号时会发生什么。