for 语句中的比较运算符

Comparison operator in for statement

我有一个名为 end_jump 的全局变量,它是 3 或 7。
根据值是什么,我想结束一个for循环(优化)。
我当前的代码是:

int i;
for(i = 0; i < ((end_jump % 3) == 0) ? 4 : 10; i++){  
    /* do something with */ array[i];  
}  

我没有收到任何错误消息,for 循环继续进行,但没有停止。既不是 4 点,也不是 10 点。

有什么问题吗?

你被 operator precedence 击中了。

关系运算符的优先级高于三元运算符(条件运算符),因此您的循环条件被视为

 for(i = 0; (i < ((end_jump % 3) == 0)) ? 4 : 10; i++)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^

其中三元的结果是 410,它们都是 "truthy",导致无限循环。

你需要一对额外的括号。

for(i = 0; i < (((end_jump % 3) == 0) ? 4 : 10); i++){  
    /* do something with */ 
}

应该完成这项工作。

请参阅 GCC 编译器警告:

warning: ?: using integer constants in boolean context, the expression will always evaluate to 'true' [-Wint-in-bool-context]
 for(i = 0; i < ((end_jump % 3) == 0) ? 4 : 10; i++){
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~