У меня есть вопрос, связанный с правилом 14.2 MISRA 2012 года «Цикл for должен быть правильно сформирован»
Рассмотрим пример кода:
int foo (int *ptr)
{
(*ptr)--;
return *ptr;
}
void main()
{
int a =20;
int i;
for (i=0; i< foo(&a) ; i++)
{
/*
<loop body>
*/
}
}
Здесь для строки for (i=0; i< foo(&a) ; i++)
IЯ получаю нарушение MISRA, 14.2.Вопрос в том, когда мы модифицируем переменную (a), присутствующую в условии цикла (i
Это просто пример для 14.2. Пожалуйста, не сосредотачивайтесь на бесконечности цикла в приведенном выше примере кода.
14.2 Правило: Второе предложение, которое
- будет выражением, не имеющим постоянных побочных эффектов, и
- будет использовать счетчик цикла и, при необходимости, флаги управления циклом, а также
- Запрещается использовать любой другой объект, измененный в теле цикла for.
Пример: -
bool_t flag = false;
for ( int16_t i = 0; ( i < 5 ) && !flag; i++ )
{
if ( C )
{
flag = true; /* Compliant - allows early termination
* of loop */
}
i = i + 3; /* Non-compliant - altering the loop
* counter */
}