分享

C语言_引用数组常量遇到的问题

 华灯初放l 2018-08-22
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大小。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多