【发布时间】:2019-10-29 08:57:47
【问题描述】:
我想在项目中的文件之间全局共享一个数据结构。
mystruct_s data[] = {
{ // element 1
}, { // element 2 ...
}, { 0 } // element N is zero to mark array end
}
在同一个文件中,对象引用data。它的类型读作mystruct_s[N]。这很好,很直接。
在头文件中,我有:
mystruct_s data[];
在其他文件中,我收到类型不匹配警告,因为它被假定为 1 元素数组。
我是根据数组内容计算长度,所以我不需要知道sizeof。一个好的老式指针mystruct_s* 就可以了。
- 如何将数组的长度自动传播到另一个文件中?如果我必须手动计算每个元素并将其放入标题中,这将是一场维护噩梦。
- 我是否应该用一些随机数来声明它,然后#pragma 忽略警告?
- 如何将数组本身声明为未知数组或单元素数组(任何都可以)或指针?
- 我不需要指针变量,而且在 AVR 平台上执行此操作似乎很复杂,其中数组应存储在 PROGMEM 中。如果我声明一个指针,它想把 指针变量 放在 PROGMEM 中。这不是很有用。然后它指向的数组在某处变成了一个未命名的对象。 (编译器(GCC 8.1.0)不喜欢这个,所以我不确定它到底想我在尝试什么......)
- 应该如果这是错误的方法,我应该如何处理?把所有东西都扔在标题里? (我喜欢对数据块使用头文件,但我更喜欢在不需要维护的块上这样做;因为这些元素引用 .c 文件中的其他对象,所以放置 @987654327 更自然@那里也是。)
【问题讨论】:
标签: c arrays variable-declaration avr-gcc