我偶然发现了与Microchip开发的MCP2517FD API对应的以下代码行,该代码用作CAN-FD网络的控制器:
ciFifoCon.word = canControlResetValues[cREGADDR_CiFIFOCON / 4];
#This line is used several times on the code.
其中 ciFifoCon 是一个32位结构,具有一个字字段和几个位,而 canControlResetValues 是以下数组:
static uint32_t canControlResetValues[] = {
/* Address 0x000 to 0x00C */
0x04980760, 0x003E0F0F, 0x000E0303, 0x00021000,
/* Address 0x010 to 0x01C */
0x00000000, 0x00000000, 0x40400040, 0x00000000,
/* Address 0x020 to 0x02C */
0x00000000, 0x00000000, 0x00000000, 0x00000000,
/* Address 0x030 to 0x03C */
0x00000000, 0x00200000, 0x00000000, 0x00000000,
/* Address 0x040 to 0x04C */
0x00000400, 0x00000000, 0x00000000, 0x00000000
};
并且_cREGADDR_CiFIFOCON_已定义为广告0x50:
#define cREGADDR_CiFIFOCON 0x050
问题:cREGADDR_CiFIFOCON / 4 = 20,它应该访问超出范围的数组元素!代码编译没有问题,但是应该具有未定义的行为。我正在尝试了解这是否是一个错误(如果是,那是开发人员真正想做的事情),还是有意地出于某种我不理解的目的完成了它。
感谢您的帮助和感谢。