循环变量在循环体中被修改¶
ID: cpp/loop-variable-changed
Kind: problem
Security severity:
Severity: recommendation
Precision: high
Tags:
- reliability
- readability
- external/jsf
Query suites:
- cpp-security-and-quality.qls
此规则查找在循环体中被修改的 for
循环变量。 for
循环应该保留用于简单的迭代,对于更复杂的情况,请使用 while
循环。大多数开发人员假设 for
循环的迭代语句是唯一改变循环计数器值的操作,因此在循环体内修改循环计数器会导致混淆。
建议¶
仅使用 for
循环中的增量表达式来修改循环变量,或者如果循环需要更复杂的变量迭代,则将其更改为 while
循环。
示例¶
void f() {
int i = 0;
for (i = 0; i < 10; i++) {
//...
if (special_case) {
i += 5; //Wrong: loop variable changed in body, which is contrary
//to the usual expectation of for loop behavior.
//Use a while loop instead.
continue;
}
}
}