嵌套结构体的联合体数组宏定义编译错误问题求助
解决嵌套结构体联合体数组中宏定义的编译错误
问题根源
EXAMPLE_2中buf宏的定义存在语法错误:
#define buf ubuf[2]
当代码中写data[0].buf[0]时,预处理器会将其展开为data[0].ubuf[2][0]。这里的ubuf[2]是数组ubuf的越界元素(ubuf长度为2,合法下标仅为0、1),且它是单个uchar类型的值,并非数组或指针,因此无法再通过[0]下标访问,这直接导致编译器抛出“subscripted value is not an array, pointer, or vector”错误。
修复方案
修改buf宏的定义,仅保留数组标识符,移除多余的下标:
#define buf ubuf // 替换原错误的#define buf ubuf[2]
修改后,data[0].buf[0]会被正确展开为data[0].ubuf[0],完全符合C语言语法规则。
验证修改后的EXAMPLE_2代码
调整宏定义后,EXAMPLE_2的代码可以正常编译运行:
#elif EXAMPLE_2 //------------------------------------------------------------------ // macros example_2 - 修改后可正常编译 //------------------------------------------------------------------ data[0].buf[0] = 0xa0; data[0].buf[1] = 0xa1; uchar a = data[0].t8lo; uchar b = data[0].t8hi; data[1].buf[0] = 0xb0; data[1].buf[1] = 0xb1; uchar c = data[1].t8lo; uchar d = data[1].t8hi; a = data[0].t8lo; b = data[0].t8hi;
内容的提问来源于stack exchange,提问作者Jorge Lino
相关产品推荐
相关产品推荐

