es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El bucle For debería estar bien formado.

Expresiones de control de flujo MISRA C-2012 (Regla MISRA C-2012 14.2)

  1. violación de misrac2012rule142: La expresión “i” utilizada en las cláusulas del bucle for es modificada en el cuerpo del bucle.


for( i = 0; i < FLASH; i++ )
{
if( name.see[i] == 0xFF )
{
name.see[ i ] = faultId | mnemonicType;

  1. modify_expr: Modificación de la expresión “i”.


i = FLASH-1; /* terminar bucle */
}
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La regla 14.2 de MISRA C-2012 establece que “un bucle for debe estar bien formado”. Específicamente, la expresión utilizada en las cláusulas del bucle for no deberá ser modificada en el cuerpo del bucle.

    En el código de ejemplo proporcionado, hay una violación de la Regla 14.2 – misra_c_2012_rule_14_2_violation – ya que la expresión “i” utilizada en la cláusula del bucle for es modificada en el cuerpo del bucle. Esto puede llevar a un comportamiento inesperado y errores, y debe ser evitado.

    Para solucionar esta violación, el código debería ser modificado para evitar cambiar la variable de control del bucle “i” dentro del cuerpo del bucle. Un enfoque posible es utilizar una variable separada para contar, así:

    int count;
    for( count = 0; count < FLASH; count++ )
    {
      if( name.see[count] == 0xFF )
      {
        name.see[ count ] = faultId | mnemonicType;
        break; /* terminate loop */
      }
    }
    

    Alternativamente, el código podría utilizar una bandera booleana para indicar cuándo terminar el bucle, así:

    bool terminate = false;
    for( int i = 0; i < FLASH && !terminate; i++ )
    {
      if( name.see[i] == 0xFF )
      {
        name.see[ i ] = faultId | mnemonicType;
        terminate = true;
      }
    }
    

    De cualquier manera, lo importante es evitar modificar la expresión de control del bucle dentro del cuerpo del bucle, para asegurar un código bien formado y predecible.

Comments are closed.