Ordine di valutazione delle espressioni

3

Il linguaggio di programmazione C di K & R afferma che C, come la maggior parte delle lingue, non specifica l'ordine in cui vengono valutati gli operandi di un operatore. (Le eccezioni sono &, ||,?: E ','). Secondo il libro, il risultato della dichiarazione:

printf("%d %d\n",++x,power(2,x));

dipende dal compilatore. Ma si dice nella riga precedente, che ho citato che non prevede l'ordine di valutazione, tranne "," e altri. Quindi non pensi che il libro sia in contraddizione con se stesso?

    
posta user1369975 05.06.2013 - 10:25
fonte

1 risposta

5

La prima istruzione (le eccezioni) si riferisce al operatore virgola , questo è (solitamente) diverso da virgole in funzione chiamate.

L'operatore virgola viene usato raramente, ma può essere usato per fare cose del genere:

int i,j; /* not comma operator */
for(i=0,j=0; i<10 && j<10; ++i, ++j) /* comma operators */
{ 
    doProcWith2Args(i,j); /*not comma operator*/
}

la valutazione degli operandi dell'operatore virgola è sempre da sinistra a destra (forma una sequenza in standardese). Le virgole dei parametri delle normali funzioni non promettono nulla sul loro ordine di valutazione (e in generale un programma che cambia in base all'ordine di valutazione mostrerà "comportamento non definito").

Non ho la mia copia di K & R qui, ma ho il sospetto che se rileggi la parte con la conoscenza dell'operatore virgola potrebbe avere più senso.

    
risposta data 05.06.2013 - 11:12
fonte

Leggi altre domande sui tag