c - 为什么没有分号给出错误,但太多分号却没有?

标签 c syntax

考虑这个 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>;

关于c - 为什么没有分号给出错误,但太多分号却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279168/

相关文章:

在 C 中转换为 ASCII

python - 在嵌入式 Python 解释器中跟踪代码执行

C++ "virtual"关键字放置

c - 在 C 中比较不同数据类型的一般规则是什么?

c - 我如何打印一个带有 void 函数的指针?

javascript:为什么要 "sign-prefix"一个变量?

perl - 返回长字符串 1 的短阶乘计算器

python - if 语句后不打印

java - JSoup 从 unix 中的 HTML 选择

c - 从 R 调用这个 C 函数(libqp_gsmo.c)的方法是什么?