Xcode-C编程 – 循环

我在Xcode中有一个与“while”循环相关的错误/警告。 有关如何解决它的任何建议?

while ( (c=getchar() != '\n') && c != EOF); 

虽然循环有空体

IDE中的图片:

使用Xcode进行C编程

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

  • clang -Wempty-body ; 包含在-Wextra ;
  • Visual C ++ C4390 ,包含在/W3

(来源: 为什么编译器没有警告我一个空的if语句? )

虽然这个编译器警告对没有副作用的条件非常有用

 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) {} 

因为它们完全相同

因此,您可以将警告集留给其他可以不情愿键入分号的情况,并明确告诉编译器不要担心这些情况。