CodeQL 文档

循环变量在循环体中被修改

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

单击查看 CodeQL 代码库中的查询

此规则查找在循环体中被修改的 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;
		}
	}
}

参考资料

  • AV 规则 201,联合攻击战斗机空中载具 C++ 编码标准。洛克希德·马丁公司,2005 年。

  • MISRA C++ 规则 6-5-3,关键系统中 C++ 语言使用指南。汽车行业软件可靠性协会,2008 年。

  • For 语句

  • Mats Henricson 和 Erik Nyquist,工业级 C++,由 Prentice Hall PTR 出版(1997 年)。第 4 章:控制流,规则 4.1 (PDF).

  • ©GitHub, Inc.
  • 条款
  • 隐私