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 ||?
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().