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 operando derecho de un operador lógico || tiene efectos secundarios persistentes debido a la llamada a una función (MISRA-C 2012 Regla 13.5).

El operando derecho de un operador lógico || tiene efectos secundarios persistentes debido a la llamada a la función detectError().

if ((detect() == VALID) ||
    (detectError() == INVALID))
{
    up(a, b);
}
typedef enum
{
    C;
} E_name;
typedef struct
{
    E_name be:4;
} S_name;
S_name name;

efectosecundariopersistente: La expresión name.be = C tiene un efecto secundario persistente: modificar un objeto no local okay.be = C.

sint16 detectError(void)
{
    name.be = C;
}

Pude resolver el operador lógico &&, ¿hay alguna solución para el operador ||?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, el operando derecho de un operador lógico || tiene efectos secundarios persistentes debido a la llamada a la función detectError(). En el fragmento de código dado, si el resultado de la función detect() es VALID, el segundo operando del operador || no se evaluará debido a la evaluación de cortocircuito. Sin embargo, si el resultado de la función detect() no es VALID, se llamará a la función detectError() y modificará la variable global name.be, lo cual puede tener efectos secundarios persistentes. Por lo tanto, el operador || en este código tiene posibles efectos secundarios debido al uso de la función detectError().

Comments are closed.