头文件中的全局数组.是否必须指定大小?

Global array in header file... is it mandatory to specify the size?

本文关键字:是否 文件 全局 数组      更新时间:2023-10-16

我在某处读到可以在头文件中声明一个(全局)数组而不指定大小。像这样:

 // Header
 extern int MyArray[];
 // CPP file
 int MyArray[] = { 1, 4, 16, 512, 8192 }; 

但是当我尝试编译时,我得到编译器错误invalid application of 'sizeof' to incomplete type 'double []'

我错过了什么吗?编译器是否强制您在前向声明的情况下指定数组大小?

问题不在于您的声明或定义。问题是,您试图将sizeof应用于MyArray,尽管它具有不完整的类型(因为它的大小已被忽略)。

这里有一个简单的方法,使用一个伴随变量来存储大小:

// Header
extern int MyArray[];
extern size_t MyArraySize;
// CPP file
int MyArray[] = { 1, 4, 16, 512, 8192 }; 
size_t MyArraySize = sizeof(MyArray);

现在您可以在其他翻译单元中使用MyArraySize来确定MyArray的大小。

但是,与其使用这个方法,我建议只给出数组的大小(或者避免全局变量)。

如果你不打算指定数组的大小,那么你需要单独跟踪它的当前大小,编译器在编译时不会知道这个大小,因此你不能使用sizeof():

. h:

extern int MyArray[];
extern size_t MyArrayLen;

. cpp:

int MyArray[] = { 1, 4, 16, 512, 8192 };
size_t MyArrayLen = 5;

谢谢大家…这确实是我的错,我没有注意到错误是由代码的另一部分引起的,那里有一个对sizeof(myArray)的调用。

相关文章: