我有一个名为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岁。
问题是什么?
答案 0 :(得分:3)
请参阅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++){
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
答案 1 :(得分:2)
你被operator precedence击中了。
Relatrional运算符优先于三元(条件),因此您的循环条件被视为
for(i = 0; (i < ((end_jump % 3) == 0)) ? 4 : 10; i++)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
三元的结果是4
或10
,它们都是&#34; truthy&#34;,导致无限循环。
你需要一对额外的括号。
for(i = 0; i < (((end_jump % 3) == 0) ? 4 : 10); i++){
/* do something with */
}
应该做的。