在一个.c文件中定义一个数组,然后在其他文件中引用,用sizeof求数组长度,那么按说是必须要声明这个数组,并且应该指明数组的大小,但是是不是声明了,这部分代码又被封装起来了,无法查看,如果在定义的时候没有指定数组的大小,只是做了初始化,而且这个初始化可以看到,而且自己可以定义初始化的值,并且初始化不同元素个数也可以,那么在其他文件求该数组长度可以办到吗,比如下面中在一个.c文件中定义一个数组:unsigned char const keys[]= { key1, key2, key3, key4, key5 }; 数组中的元素是已定义的宏,在另一个文件中求数组大长度 arrlen = sizeof(keys) / sizeof(keys[0]); 这个有没有什么办法可以办到 |
extern unsigned char const keys[];
这个不行吧,在其他文件声明的时候应该带上元素个数吧
extern不需要
什么type
别的文件中无法引用这个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可以直接知道数组的大小。
这个我知道,多谢