【发布时间】:2013-04-25 23:56:53
【问题描述】:
我们的代码库包含几个while((*assignment*) *condition*) 形式的循环,例如:
while((c = *s++) != '\0') {...}
while((i = getNext()) != NULL) {...}
不幸的是,这些导致编译器发出“条件赋值”警告,我想摆脱它。我的计划是将while 循环转换为for(assignment; condition; assignment) 形式的for 循环,例如:
for(c = *s++; c != '\0'; c = *s++) {...}
for(i = getNext(); i != 0; i = getNext()) {...}
这种转换有效吗?有没有更好的选择?
【问题讨论】:
-
对于您显示的
while循环,GCC 不会抱怨“条件分配”。如果您省略了!= '\0'或!= NULL条件和 额外级别的括号(例如while (c = *s++)),则GCC 会发出警告。否则,它不会...那么您在哪个平台上使用哪个编译器和哪个选项? -
使用#pragma 关闭警告。您正在更改未损坏的代码,因此您冒着引入错误的风险。
-
@Paulpro 您非常困惑并且完全错误。警告是针对
while循环中的原始代码,而不是没有收到警告的转换后的for循环,即使他们这样做了,您的更改也没有相关性。 -
你用的是什么编译器?
标签: c for-loop while-loop