Nello standard C99, le espressioni consentono la precedenza e l'associatività.associatività C99 per gli operatori - dove è specificato?
precedenza viene documentata abbastanza bene poiché l'ordine in cui gli operatori compaiono nel documento sono di ridurre la precedenza, così chiamate di funzione vengono prima operatori moltiplicativi che, a loro volta, vengono prima di operatori additivi.
Tuttavia, non riesco a trovare una descrizione definitiva dell'associatività, che sia sinistra o destra. Questo è importante poiché 35/5*2
sarebbe 14
per una variante (35/5)*2
e 3
per l'altra variante 35/(5*2)
.
Sezione 6.5 Expressions /3, footnote 74
stato:
La sintassi specifica la precedenza degli operatori nella valutazione di un'espressione, che è la stessa come l'ordine dei principali sottoclausole di questo subclause, massima precedenza primi.
All'interno di ogni sottopunto principale, gli operatori hanno la stessa precedenza. L'associatività sinistra o destra è indicata in ogni sottoclaus dalla sintassi per le espressioni discusse al suo interno.
Tuttavia, prendendo il caso moltiplicativo, ad esempio:
6.5.5 Operatori moltiplicativi
Sintassi
multiplicative-expression:
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression/cast-expression
multiplicative-expression % cast-expression
Vincoli
Ciascuno degli operandi deve avere un tipo aritmetico. Gli operandi dell'operatore%
devono avere di tipo intero.
semantica
I normali conversioni aritmetiche vengono eseguite su operandi.
Il risultato dell'operatore binario*
è il prodotto degli operandi.
Il risultato dell'operatore/
è il quoziente dalla divisione del primo operando secondo ; il risultato dell'operatore%
è il resto. In entrambe le operazioni, se il valore di il secondo operando è zero, il comportamento non è definito.
Quando gli interi sono divisi, il risultato dell'operatore/
è il quoziente algebrico con qualsiasi parte frazionata scartata. Se il quozientea/b
è rappresentabile, l'espressione(a/b)*b + a%b
equivale aa
.
riesco a vedere nulla in là che cita l'associatività, né sembrano esserci qualsiasi impostazione altrove nello standard di default.
Mi manca qualcosa qui?
Aaahh, vedo, è in realtà nel _grammar_ piuttosto che nel testo esplicativo. Ciò ha senso. Presumibilmente, l'espressione moltiplicativa-espressione cast-espressione sarebbe giusta-associativa. – paxdiablo
corretto. Ho aggiunto un esempio di associatività destra preso dallo standard. –
Questo è ciò che 'l'associatività sinistra o destra è indicata in ogni sottoclaus dalla sintassi' nella nota che sta cercando di dire. –