为什么以下do-while循环有效?

kev*_*mes 4 c loops do-while

循环如下:

do;
while(1);
Run Code Online (Sandbox Code Playgroud)

为什么上面的循环没有给出语法错误?

我正在使用mingw gcc编译器

Sha*_*our 7

该代码看起来像是为了模糊其含义而编写,但如果我们查看草案C99标准部分6.8.5 迭代语句,do while的语法是:

do statement while ( expression ) ;
Run Code Online (Sandbox Code Playgroud)

声明可以是一个表达式语句这反过来又可以是一个空语句是什么;是.所以它是一样的:

do
  ;
while(1);
Run Code Online (Sandbox Code Playgroud)

我们可以从6.8.3 表达式和null语句中看到段落3说:

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


Nav*_*vin 6

do
    ; //nop
while(1);
Run Code Online (Sandbox Code Playgroud)

现在它更具可读性:)


请注意,这;是一个空语句.