警告[...]: 未定义行为:在此语句中,volatile访问的顺序是未定义的 x.cpp xxx
为什么这行代码是未定义行为?
case 2:
Vdda = 3.3 * (*VREFINT_CAL) / ADC_DR->DATA;
声明/初始化的位置:
volatile short const *VREFINT_CAL = (short *) 0x1FFFF7BA;
并且
volatile STRUCT_ADC_DR *ADC_DR = (STRUCT_ADC_DR*) 0x40012440;
定义者:
typedef struct
{
unsigned DATA : 16;
unsigned : 16;
} STRUCT_ADC_DR;
是否因为编译器不确定volatile元素在访问顺序上的行为可能会有所不同?(这是什么情况)
但是,应该确保按照从左到右的顺序执行计算,因为运算符具有相同的优先级,是吗?