STM32
直播中

123

10年用户 820经验值
擅长:可编程逻辑
私信 关注
[问答]

在一个.c文件中定义一个数组遇到的疑问求解

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

arrlen = sizeof(keys) / sizeof(keys[0]);
这个有没有什么办法可以办到

回帖(2)

张锐

2024-5-14 09:52:15
楼主定义的是unsigned char型的常量,理论是用sizeof(keys) 就可以了。因为每个占用一个字节。
举报

王银喜

2024-5-14 16:59:49
在一个.c文件中定义一个数组并在其他文件中引用,可以使用外部链接(external linkage)来实现。外部链接意味着该变量或函数可以在程序的其他文件中访问。为了在其他文件中使用这个数组并使用sizeof求数组长度,你需要遵循以下步骤:

1. 在定义数组的.c文件中,使用`extern`关键字声明数组,这样编译器就知道这个数组在程序的其他部分定义。例如:

```c
// file1.c
unsigned char const keys[] = {key1, key2, key3, key4, ...};
```

2. 在其他.c文件中,使用`extern`关键字声明相同的数组,这样编译器就知道这个数组在程序的其他部分定义,而不是在当前文件中定义。例如:

```c
// file2.c
extern unsigned char const keys[];
```

3. 在其他.c文件中,你可以使用sizeof运算符来获取数组的长度。例如:

```c
// file2.c
int length = sizeof(keys) / sizeof(keys[0]);
```

这里,`sizeof(keys)`将返回整个数组的大小,而`sizeof(keys[0])`将返回数组中单个元素的大小。将整个数组的大小除以单个元素的大小将给出数组的长度。

需要注意的是,如果数组在定义时没有指定大小,编译器会根据初始化的元素个数自动计算数组的大小。因此,在这种情况下,即使在其他文件中使用`extern`声明数组,也可以使用sizeof运算符来获取数组的长度。

总之,要在其他文件中引用一个数组并使用sizeof求数组长度,你需要:

1. 在定义数组的.c文件中使用`extern`声明数组。
2. 在其他.c文件中使用`extern`声明相同的数组。
3. 使用sizeof运算符来获取数组的长度。

这样,即使数组在定义时没有指定大小,也可以在其他文件中获取数组的长度。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分