The right hand operand of a logical operator || has persistent side effects because of calling function 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;
persistent_side_effect: Expression name.be = C has persistent side effect: modifying non-local object okay.be = C.
sint16 detectError(void)
{
name.be = C;
}
I was able to solve logical operator &&, is there a solution for || operator?
CodePudding user response:
Surely the simplest work around for this is:
whateverType detectFlag1 = detect();
whateverType detectFlag2 = detectError();
if ( ( detectFlag1 == VALID ) || ( detectFlag2 == INVALID ) )
{
up( a,b );
}
Simple, clear code, with no potential side effects?