有谁知道如何从外部文件计算数组的大小?
考虑:
Data.c 的float arr[]={1.4, 2.3, 7.6, 4.8, 3.3};
MAIN.C 的
#include <stdio.h>
int main()
{
extern float arr[];
//...
}
然后我怎么去那里?我尝试过使用sizeof
和size_t
,但这两种方法仍有错误。
答案 0 :(得分:4)
在你的main.c文件中,编译器唯一的信息是extern float arr[];
,这不包括大小。
所以你要么尝试在Data.c中定义一个返回sizeof(arr)
的函数(在这个编译单元中应该知道大小),或者当你标记问题c ++时,你使用std::array
固定大小或std::vector
可变大小。
答案 1 :(得分:3)
问题是extern float arr[]
是不完整类型,它只是说“在其他地方,有一个名为arr
的未知大小的数组”。如果已知大小,则只能使用sizeof
,例如extern float arr[5]
。
但是,你不应该写这样的程序。在非常量变量上使用extern
总是表明程序设计不好。
相反,您应该使用私有封装,并且所有对变量的访问都应该通过setter / getter函数来完成。同样,您可以创建一个返回数组大小的函数get_size()
。
答案 2 :(得分:2)
简短的回答是,你不能做你想做的事。当你说
extern float arr[];
编译器根本无法获得该外部数组的大小。
简单的解决方法是使用第二个包含数组大小的全局变量:
Data.c
float arr[]={1.4, 2.3, 7.6, 4.8, 3.3};
int arrsz = sizeof(arr) / sizeof(arr[0]);
MAIN.C
extern float arr[];
extern int arrsz;
要获得额外赠送金额,请使用size_t arrsz
代替int
。
正如其他一些答案所指出的那样,像这样的全球变量风格很差,特别是在&#34;真实&#34;程式。对于一些更高风格,更简单的修复,请参阅其他答案。