Xcode-C编程-While循环

Xcode-C编程-While循环,c,xcode,while-loop,C,Xcode,While Loop,我在Xcode中有一个与“while”循环相关的错误/警告。对如何修复它有什么建议吗 while ( (c=getchar() != '\n') && c != EOF); 而循环的主体是空的 IDE中的图片: 在不知道哪个编译器的情况下,我可以列出其中两个编译器的已知警告标志: 叮当声-哭泣的身体;也包括在-Wextra中 Visual C++,包含在/W3 (来源:) 虽然此编译器警告对于没有副作用的情况非常有用,例如 while (i > 0); { --

我在Xcode中有一个与“while”循环相关的错误/警告。对如何修复它有什么建议吗

while ( (c=getchar() != '\n') && c != EOF);
而循环的主体是空的

IDE中的图片:


在不知道哪个编译器的情况下,我可以列出其中两个编译器的已知警告标志:

  • 叮当声
    -哭泣的身体
    ;也包括在
    -Wextra
  • Visual C++,包含在
    /W3
(来源:)

虽然此编译器警告对于没有副作用的情况非常有用,例如

while (i > 0);
{
   --i;
}
(这将导致无限循环)

在您的具体情况下:

while ( (c=getchar() != '\n') && c != EOF);
是跳到下一行
stdin
或输入结束的完美惯用方式

从XCode打印的警告文本(来自底层编译器)中,我非常确定您的XCode配置了
clang
,因此,是的,在使用
clang
时有一种关闭警告的方法:

$ clang test.c 
test.c:6:12: warning: while loop has empty body [-Wempty-body]
  while (0);
           ^
test.c:6:12: note: put the semicolon on a separate line to silence this warning
就你而言:

while ( (c=getchar() != '\n') && c != EOF)
;
在这种情况下(个人品味问题),我会:

while ( (c=getchar() != '\n') && c != EOF)
{}
既然是


因此,您可以在其他情况下保留警告集,在这些情况下,分号可能会被不情愿地键入,并明确告诉编译器不要担心这些情况。

请不要发布代码图像,发布代码。此警告很愚蠢。循环有副作用。我正在工作,无法访问Xcode。有人应该检查“空循环体”是否仍然是可以在项目生成设置中启用或禁用的警告之一。如果是这样,那就是答案。哈哈。警告并非“愚蠢”,副作用可能是有意的(跳到最后)。警告的目的是,在C语言中,大括号是可选的,很容易在不需要分号的情况下意外地包含分号。解决方案是明确意图,例如,
while(…){}
(大括号中没有任何内容)而不是
while(…)
@Jean-Françoisfare是的,我启动一个新的Xcode或任何项目的第一步就是打开所有可用的警告。无关评论:编辑了这篇文章中的图片后,现在已经不清楚作者实际上指的是警告,而不是错误。你认为调整文本也有道理吗?谢谢!下一行的分号使警告无效!