La mia comprensione dell'intera sequenza di punti è fondamentale. Tutto ciò che ho è un'idea cruda intuitiva che "una volta che si incontra un punto di sequenza, possiamo essere sicuri che tutti gli effetti collaterali delle valutazioni precedenti sono completi". Ho letto anche che in dichiarazioni come printf("%d",a++,++a,a++)
il comportamento non è definito in quanto una virgola non indica un punto di sequenza mentre un punto e virgola lo fa. Quindi, invece di fare supposizioni e andare per intuizione, sento che una risposta molto rigorosa e conclusiva mi aiuterà molto.Esistono problemi di "sequenza" con istruzioni come "int a = 4, * ptr = & a;" o "x + = 4, y = x * 2;"?
Così sono i seguenti tipi di dichiarazioni sicuro & certo in C:
int a=4,*ptr=&a; //Statement 1
x+=4,y=x*2; //Statement 2 (Assume x and y are integer variables)
Se sì, come? Soprattutto nel secondo caso, se una virgola non è un punto di sequenza, come possiamo essere certi chesia stato incrementato diprima di utilizzarlo nell'assegnazione y=x*2
? E per la prima affermazione, come posso essere sicuro che a
è stato inizializzato e assegnato memoria prima di assegnare il suo indirizzo a ptr
? Dovrei giocare sicuro e utilizzare il seguente per quanto sopra:
int a=4,*ptr;
ptr=&a;
e
x+=4;
y=x*2;
Modifica La mia comprensione del l'operatore virgola mi dice che tali dichiarazioni sono sicuri. Ma dopo aver letto sui punti di sequenza e su come qualcosa come printf("%d",a++,++a,a++)
non è definito, ho dei ripensamenti.
',' non è un punto di sequenza in 'printf ("% d ", a ++, ++ a, a ++)' ma è uno in 'x + = 4, y = x * 2;'. E 'int a = 4, * ptr = & a;' non è un'affermazione. –
@PascalCuoq Che cos'è 'int a = 4, * ptr = & a;' allora? Non dichiara e inizializza 'a' e' ptr'? –
@PascalCuoq 'int a = 4, * ptr = & a;' dopo tutto è corretto, giusto? –