Il seguente codice richiama UB?
-
20-09-2019 - |
Domanda
Il seguente codice richiama UB ?
int main(){
volatile int i = 0;
volatile int* p = &i;
int j = ++i * *p;
}
Soluzione
sì lo è Comportamento indefinito perché stai cercando di violare la seconda regola..
Lo afferma la Norma
1) Tra il punto della sequenza precedente e quello successivo il valore memorizzato di un oggetto deve essere modificato al più una volta mediante la valutazione di un'espressione.
2) Inoltre, si potrà accedere al valore precedente solo per determinare il valore da memorizzare.
Nota:L'ordine di valutazione degli operandi di *
l'operatore è non specificato E *p
non è altro che i
.
Altri suggerimenti
Sì -. Sia ++ I o * p (che è i) può essere valutata prima
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow