Avviso [...]: un comportamento indefinito: l'ordine degli accessi volatili non è definito in questa informativa x.cpp xxxQual è la logica di questo comportamento indefinito?
Perché questa linea è un comportamento indefinito?
case 2:
Vdda = 3.3 * (*VREFINT_CAL)/ADC_DR->DATA;
Se le dichiarazioni/inizializzazioni sono:
volatile short const *VREFINT_CAL = (short *) 0x1FFFF7BA;
e
volatile STRUCT_ADC_DR *ADC_DR = (STRUCT_ADC_DR*) 0x40012440;
definito da:
typedef struct
{
unsigned DATA : 16;
unsigned : 16;
} STRUCT_ADC_DR;
E 'perché il compilatore non è sicuro circa la elementi volatili potrebbero agire diversamente nell'ordine in cui sono accessibili? (Che cos'è il caso)
Ma non si dovrebbe garantire che il calcolo venga eseguito da sinistra a destra poiché gli operatori hanno la stessa priorità?
Sei sicuro di sapere che cosa 'volatile' fa? E perché ci sono indirizzi hardcoded nel tuo codice? – deviantfan
Penso che questo debba essere riformulato come "perché lo standard indica esplicitamente questo come comportamento non definito/qual è la logica per ...", altrimenti otterrete "lo standard dice così" da molte persone. – OMGtechy
L'ordine di valutazione degli operandi non è specificato. – molbdnilo