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

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

[复制链接]
黑皮男 提问时间: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可以直接知道数组的大小。
黑皮男 回答时间:2015-7-6 09:05:50
我明白了,没有看到后面还有个变量保存数组大小
废鱼 回答时间:2015-7-6 09:13:44
楼主定义的是unsigned char型的常量,理论是用sizeof(keys) 就可以了。因为每个占用一个字节。
黑皮男 回答时间:2015-7-6 17:29:00
安 发表于 2015-7-6 09:13
楼主定义的是unsigned char型的常量,理论是用sizeof(keys) 就可以了。因为每个占用一个字节。 ...

这个我知道,多谢

所属标签

相似问题

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