假设我们有以下 for 循环:
#define UPPER 0U
int i;
for(i = 0; i < UPPER; i++) {
/* foo */
}
这将产生一个 W549: condition is always true
警告,显然是因为我们得到了 for(i = 0; i < 0; i++)
宏展开后。在实际代码中,UPPER
是一个预编译时间参数(即,它由一些构建脚本设置,具体取决于目标平台等),可以取 0 到 255 之间的任何值,因此循环不仅仅是死代码。
当 UPPER == 0
时,我怎样才能优雅地避免这个警告? ?
显然,可以将 for 循环包装在 if 语句中:
#define UPPER 0U
if(UPPER != 0U) {
int i;
for(i = 0; i < UPPER; i++) {
/* foo */
}
}
但这不是我所说的优雅。
最佳答案
如果你不想用代码包装它,使用条件编译包装代码:
#if UPPER > 0
int i;
for(i = 0; i < UPPER; i++) {
/* foo */
}
#endif
优雅源于:
UPPER
为 0 时无死码。- 自 1970 年 1 月 1 日以来完全可移植到任何 C 编译器
- 易于阅读和理解
关于c - 如何优雅地避免针对这种特定类型的 for 循环的 "condition is always true"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271158/