你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

有一个关于数组元素个数的问题

[复制链接]
黑皮男 提问时间:2015-6-29 09:05 /
在一个.c文件中定义一个数组,然后在其他文件中引用,用sizeof求数组长度,那么按说是必须要声明这个数组,并且应该指明数组的大小,但是是不是声明了,这部分代码又被封装起来了,无法查看,如果在定义的时候没有指定数组的大小,只是做了初始化,而且这个初始化可以看到,而且自己可以定义初始化的值,并且初始化不同元素个数也可以,那么在其他文件求该数组长度可以办到吗,比如下面中在一个.c文件中定义一个数组:unsigned char const keys[]=
{
   key1,
   key2,
   key3,
   key4,
   key5
};
数组中的元素是已定义的宏,在另一个文件中求数组大长度

arrlen = sizeof(keys) / sizeof(keys[0]);
这个有没有什么办法可以办到
<
收藏 评论12 发布时间:2015-6-29 09:05

举报

12个回答
stary666 回答时间:2015-6-29 09:41:12
type是什么?????
QianFan 回答时间:2015-6-29 09:54:36
在其他文件中
extern unsigned char const keys[];
黑皮男 回答时间:2015-6-29 10:15:52
QianFan 发表于 2015-6-29 09:54
在其他文件中
extern unsigned char const keys[];

这个不行吧,在其他文件声明的时候应该带上元素个数吧
QianFan 回答时间:2015-6-29 10:16:11
黑皮男 发表于 2015-6-29 10:15
这个不行吧,在其他文件声明的时候应该带上元素个数吧

extern不需要
黑皮男 回答时间:2015-6-30 19:10:37
stary666 发表于 2015-6-29 09:41
type是什么?????

什么type
54chenjq 回答时间:2015-6-30 21:17:20
extern 妙极了
759611 回答时间:2015-6-30 21:34:45
extern ……
759611 回答时间:2015-6-30 21:35:02
extern ……
moyanming2013 回答时间:2015-6-30 21:52:18
本帖最后由 moyanming2013 于 2015-6-30 21:59 编辑

别的文件中无法引用这个keys变量,因为没有include。会出现编译错误。
QianFan版主说的很对,需要在头文件中使用extern声明。但长度如何获知呢?
想必可以如下:
/*abc.h*/
typedef enum{
    key1=0x01;
    key2=0x72;
    maxKey=2
};
extern unsinged char const keys[maxKey];

/*abc.c*/
#include "abc.h"
unsigned char const keys[maxKey] = {key1,key2};

扩充按键时,只需要在enum中添加key并使maxKey增加,并更新keys的定义即可,不用管keys的长度,因为这个长度在编译时已确定:maxKey,keys和maxKey在abc.h引用的任何地方都可以直接使用。sizeof等库函数不太建议经常使用,逼不得已再用,一是sizeof等(由其strlen)开销大(时间和空间都大);二是用了maxKey可以直接知道数组的大小。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版