为什么没有分号给出错误,但太多分号却没有?
Why no semicolon gives errors but too many of them don't?
考虑这个 C 代码:
#include <stdio.h>;
int main(void) {
puts("Hello, world!");; ;
;
return 0; ;
; ;
};
在这里,我几乎在所有可能的地方都加上了分号。只是为了好玩。但令人惊讶的是it worked!包含后我收到了关于分号的警告,但其他绝对错误的分号起作用了。如果我忘记在 puts
后面加上分号,我会得到以下错误
error: expected ';' before 'return'
为什么很多错误和无用的分号不会导致错误? 在我看来,它们应该被视为语法错误。
为什么空语句应该是错误的?不是。
一个分号构成一个空语句。它不仅合法,在某些情况下也很有用,例如,不需要实体的 while
/ for
循环。一个例子:
while (*s++ = *t++)
;
C11 6.8.3 Expression and null statements
A null statement (consisting of just a semicolon) performs no operations.
唯一的语法错误是这一行:
#include <stdio.h>;
无论是否为空,分号表示语句结束。没有分号意味着您没有关闭/结束最后一条语句,而是开始了一条会出错的新语句。太多的分号表示每个空白语句的结尾。所以,它不会给出错误
;
(语句分隔符)总是用于指定特定语句结束。执行下一条语句后。
如果你不输入分隔符,那么它会考虑当前语句的下一条语句并执行。这会产生语法错误。
但在其他情况下,当我们放置多个分隔符时,例如:
int a;;;;;
在这种情况下,我们有 5 条语句,其中 int a
是第一条语句,接下来的四条语句是空语句,将在编译期间被编译器删除。
查看此问题的一些有趣案例:
int main()
{
int a=0 ;,;
return 0;
}
当我们改变上面的 programj 它仍然有效:
int main()
{
int a=0 ,; /*change done*/
return 0;
}
;
是上述答案中提到的 C 中的语句分隔符。 Rahul 的回答是完全正确的,只是您可以看到 this 对一个问题的回答,该问题询问为什么 C 中的语句以分号结尾。这样,当你理解了为什么要使用分号时,你就会明白分号放多了会发生什么。
考虑这个 C 代码:
#include <stdio.h>;
int main(void) {
puts("Hello, world!");; ;
;
return 0; ;
; ;
};
在这里,我几乎在所有可能的地方都加上了分号。只是为了好玩。但令人惊讶的是it worked!包含后我收到了关于分号的警告,但其他绝对错误的分号起作用了。如果我忘记在 puts
后面加上分号,我会得到以下错误
error: expected ';' before 'return'
为什么很多错误和无用的分号不会导致错误? 在我看来,它们应该被视为语法错误。
为什么空语句应该是错误的?不是。
一个分号构成一个空语句。它不仅合法,在某些情况下也很有用,例如,不需要实体的 while
/ for
循环。一个例子:
while (*s++ = *t++)
;
C11 6.8.3 Expression and null statements
A null statement (consisting of just a semicolon) performs no operations.
唯一的语法错误是这一行:
#include <stdio.h>;
无论是否为空,分号表示语句结束。没有分号意味着您没有关闭/结束最后一条语句,而是开始了一条会出错的新语句。太多的分号表示每个空白语句的结尾。所以,它不会给出错误
;
(语句分隔符)总是用于指定特定语句结束。执行下一条语句后。
如果你不输入分隔符,那么它会考虑当前语句的下一条语句并执行。这会产生语法错误。
但在其他情况下,当我们放置多个分隔符时,例如:
int a;;;;;
在这种情况下,我们有 5 条语句,其中 int a
是第一条语句,接下来的四条语句是空语句,将在编译期间被编译器删除。
查看此问题的一些有趣案例:
int main()
{
int a=0 ;,;
return 0;
}
当我们改变上面的 programj 它仍然有效:
int main()
{
int a=0 ,; /*change done*/
return 0;
}
;
是上述答案中提到的 C 中的语句分隔符。 Rahul 的回答是完全正确的,只是您可以看到 this 对一个问题的回答,该问题询问为什么 C 中的语句以分号结尾。这样,当你理解了为什么要使用分号时,你就会明白分号放多了会发生什么。