C while(条件); 体内无指令

tes*_*ter 0 c while-loop

我正在学习C,我对while有疑问。在一次练习中我已经:

while(1){
   while((sockacc = accept(ds_sock,&client,&length)) == -1);

   --other instructions--
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我第二个while的功能是什么?我的意思是,我知道接受呼叫的用途。我不明白如果体内没有任何东西,为什么要使用 while 条件。

Eri*_*ert 5

退后一步。请记住的含义

while(c) s;
Run Code Online (Sandbox Code Playgroud)

只是一种简短的写法:

CONTINUE: 
if (c) 
  goto BODY;  
else 
  goto BREAK;
BODY: 
s;
goto CONTINUE;
BREAK: ;
Run Code Online (Sandbox Code Playgroud)

当然和break;continue;goto BREAK;goto CONTINUE;循环并不神奇;它是一种神奇的东西。它们只是编写一堆goto陈述的一种简短而愉快的方式。

所以你的程序:

while(1){
  while((sockacc = accept(ds_sock,&client,&length)) == -1);
  --other instructions--
}
Run Code Online (Sandbox Code Playgroud)

只是一种更好的写法:

OUTER_CONTINUE: 
if (1) 
  goto OUTER_BODY;  
else 
  goto OUTER_BREAK;
OUTER_BODY: 
{
  INNER_CONTINUE: 
  if ((sockacc = accept(ds_sock,&client,&length)) == -1) 
    goto INNER_BODY;  
  else 
    goto INNER_BREAK;
  INNER_BODY: 
  ;
  goto INNER_CONTINUE;
  INNER_BREAK: ;
  --other instructions--
}
goto OUTER_CONTINUE;
OUTER_BREAK: ;
Run Code Online (Sandbox Code Playgroud)