考虑这个C代码:

#include <stdio.h>;

int main(void) {
    puts("Hello, world!");; ;
    ;
    return 0; ;
    ; ;
};

在这里,我几乎可以在任何地方放置分号。 只是为了好玩 但令人惊讶的是它有效 我收到了关于分号后分号的警告,但其他绝对错误的分号也起作用了。 如果我忘了把后一个分号puts ,我会得到以下错误

错误:预期';' 在'返回'之前


为什么许多错误和无用的分号都不会导致错误? 在我看来,他们应该被视为语法错误。

===============>>#1 票数:10 已采纳

单个分号构造一个空语句 它不仅合法,在某些情况下也很有用,例如,一个不需要真实身体的while / for循环。 一个例子:

while (*s++ = *t++)
    ;

C11 6.8.3表达式和空语句

空语句(仅由分号组成)不执行任何操作。


唯一的语法错误是这一行:

#include <stdio.h>;

===============>>#2 票数:5

分号表示语句的结尾是否为空。 没有分号意味着你没有关闭/结束最后一个语句但是启动了一个给出错误的新语句。 分号过多表示每个空白语句结束。 所以,它不会给出错误

===============>>#3 票数:1

为什么空语句应该是错误的? 它不是。

===============>>#4 票数:0

; (语句分隔符)始终用于指定特定语句的结束。 在执行下一个语句之后。

如果你不放置delimeter,那么它会考虑当前语句的下一个语句并执行。 这给出了一个合成错误。

但在其他情况下,当我们放置多个分隔符时,例如:

int a;;;;;

在这种情况下,我们有5个语句,其中int a是第一个语句,接下来的四个语句是null语句,编译时将由编译器删除。

查看此问题的一些有趣案例

int main()
{
    int a=0 ;,;
    return 0;
}

当我们改变上面的programj它仍然有效:

int main()
{
    int a=0 ,; /*change done*/
    return 0;
}

===============>>#5 票数:0

; 是上面答案中提到的C中的语句分隔符。 拉胡尔的回答是完全正确的,只是你可以看到这个答案,询问为何在C语句以分号结束的问题。 因此,当您理解为什么使用分号时,您将了解当您放置过多分号时会发生什么。

  ask by ForceBru translate from so

未解决问题?本站智能推荐:

2回复

分号上的函数参数

我的测试矩阵的例子 我有点迷茫,我无法弄清楚int n;是什么int n; 在我的参数声明中,它适用于C,但C ++不允许这种实现。 我想了解这是如何工作的,因为我要将此代码迁移到C ++。
1回复

等号前的分号是什么意思?

我的书包含以下代码。 这是某种印刷错误吗? 我一直无法在网上找到任何东西。
4回复

for循环括号内的两个分号

我正在定制我在互联网上找到的代码(这是Adafruit Tweet Receipt )。 我无法理解代码的许多部分,但最令我困惑的是括号内有两个分号的for循环 对(;;)意味着什么? (这是一个Arduino程序,所以我猜它在C中)。
3回复

什么时候用c / c ++命令分号?

在上面的例子中似乎是一个; 是可选的,当是分号之后}必要在C / C ++?
1回复

在C中,对于被丢弃的语句,逗号和分号有什么区别

我问是因为在我仔细阅读grep的源代码时,我注意到它使用了C语法的元素,即逗号,以一种我不习惯看到的方式,例如: 我研究了用法,发现: 用作运算符时,逗号运算符使用以下语法: expr1, expr2 左操作数expr1被评估为void表达式(即,如果不包含副作
9回复

是否可以在没有分号的情况下执行“C”语句

发布示例以执行不带分号的“C”语句(;)
1回复

没有分号的程序在C中编译好而不是在C ++中为什么?

我正在使用Orwell Dev C ++ IDE。 最近我测试了以下简单的程序,其中我忘了放分号( ; )但它仍然在C中编译好但在C ++中没编译。 为什么? 是什么原因? [警告]结构或联合结束时没有分号[默认启用] [错误]预期';' 在会员声明结束时
2回复

C中变量名称中下划线之前分号的可能原因

在本教程中关于C语言中的套接字编程,我偶然发现了以下行: 出于某种原因,可变serv_addr写为serv;_addr当它作为引用传递。 它看起来像一个拼写错误(并且似乎也没有使用标准标志进行编译),但是这种用法在整个代码中是一致的 - 每当包含下划线的变量名称作为引用传递时,在下划线
4回复

为什么这段代码不会出错?

通过遵循常规模式,在第一个分号后应该有一个条件 ,但这里是初始化 ,所以这应该给出一个错误。 这甚至是一个有效的格式怎么样? 但输出是642
5回复

在此C程序中返回结构时出错的原因是什么?

我的程序打算实现这一目标 (A)编写一个名为larger()的C函数,该函数返回传递给它的任何两个日期中的较晚的日期。 例如,如果将日期10/9/2001和11/3/2001传递给large larger() ,则将返回第二个日期。 (B)在一个完整的单元中创建为(A)编写的lar