causa precedenza maggiore dell'operatore ?:
sopra =
, l'espressione
a > b ? g = a : g = b;
verrà analizzato come
(a > b ? g = a : g) = b;
L'espressione (a > b ? g = a : g)
darà un rvalue. L'operando fianco di assegnazione dell'operatore (=
) deve essere un lvalue (modificabile ).
Change
a > b ? g = a : g = b ;
a
a > b ? (g = a) : (g = b);
o
g = a > b ? a : b;
. C11-§6.5.16/2: Un operatore di assegnazione deve avere un lvalue modificabile come suo operando di sinistra.
. §6.3.2.1/1: Un lvalue è un'espressione (con un tipo di oggetto diverso da void) che potenzialmente designa un oggetto; 64) se un lvalue non designa un oggetto quando viene valutato, il comportamento non è definito. Quando si dice che un oggetto ha un particolare tipo, il tipo è specificato dal lvalue usato per designare l'oggetto. Un lvalue modificabile è un lvalue che non ha un tipo di array, non ha un tipo incompleto, non ha un tipo const-qualified, e se è una struttura o unione, non ha alcun membro (incluso, in modo ricorsivo, qualsiasi membro o elemento di tutti gli aggregati o sindacati contenuti) con un tipo con certificato costante.
Devi cambiare 'a> b? g = a: g = b; 'a' g = a> b? a: b; 'o' a> b? g = a: (g = b); ' – pouyan