1、问题场景: 文件<a1.c>中定义了一个常量数组,这个数组的内容经常需要修改,因此长度会有变动: const u8 buf[]={1,2,3,4,5,7} 2、问题描述: (1)文件<a2.c>需要引用这个常量,extern const u8 buf[?];引用时的长度怎么确定? 用宏定义 #define len sizeof(buf)/sizeof(u8) extern const u8 buf[len] 编译不能通过。为什么不能通过,是否有其他解决方案? 补充描述 buf的长度没法确定; ①空着不行,在其他文件计算sizeof(buf)/sizeof(u8)时,编译报不知道buf长度错误;看来编译器是根据extern声明判断长度; ②用宏不行,宏计算的结果放到声明里,编译器也会报错; ③用常量定义长度,编译器也报错; 3、解决方法一: (1)将#define len sizeof(buf)/sizeof(u8) 修改为 #define len sizeof(buf)/sizeof(buf[0]) (2)在同一个文件中,先定义 const u8 buf[]={1,2,3,4,5,7} 接着定义 const u8 Buf_Lenth=sizeof(buf)/sizeof(buf[0]); (3)在头文件中, 用extern声明, extern const u8 buf[]; (4)在其他文件中,需要用到数组长度时,用Buf_Lenth;编译就可以通过; 注意:在其他文件中使用时,不用算sizeof(buf)/sizeof(buf[0] ,会报错未定义buf大小。
|
|