2010-01-15 10 views
8

Il seguente codice richiama UB?Il seguente codice richiama UB?

int main(){ 
    volatile int i = 0; 
    volatile int* p = &i; 
    int j = ++i * *p; 
} 
+4

@Prasoon: Non è corretto modificare i post di altri solo per formattare il codice con il proprio stile di indentazione preferito. Non hai letto le linee guida StackOverflow - "Rispetto all'autore originale"? (> _ <) –

risposta

6

sì che è indefinito Comportamento perché si sta tentando di violare la seconda regola ..

Lo standard prevede che

1) Tra il precedente e il successivo punto di sequenza di un oggetto ha la propria valore memorizzato modificato al massimo una volta dalla valutazione di un'espressione.

2) Inoltre, è possibile accedere al valore precedente solo per determinare il valore da memorizzare.

Nota: L'ordine di valutazione degli operandi di * operatore specificato e *p non è altro che i.

+0

Intendi l'operatore '*' immagino ... –

+0

Sì typo: P ....... modificato il mio post :) –

+1

@Prasoon: Non è giusto modificare i post di altri solo per formattare il loro codice con il tuo preferito stile di indentazione. Non hai letto le linee guida StackOverflow - "Rispetto all'autore originale"? (> _ <) –

9

Sì - o ++ I o * p (che sono io) può essere valutato prima.

+0

ma indipendentemente dall'ordine di valutazione il risultato sarebbe lo stesso giusto? –

+1

No. Se ++ i viene valutato per primo, si ha 1 * 1. Se * p viene valutato per primo, si ha 1 * 0. –

+0

Oops! Come potrei non accorgermene! Grazie per la risposta! –

Problemi correlati