c - 如何在 C99 中声明另一个文件中定义的全局数组大小?

标签 c arrays

考虑到VLA(可变长度数组)我想问你对以下问题的看法:如果一个数组在一个文件中定义在全局范围内:

int arr[] = {1, 2, 3};

// in the same file it is no problem to obtain the number of elements in arr by
#define arr_num sizeof(arr)/sizeof(arr[0])
// or
enum {arr_num = sizeof(arr)/sizeof(arr[0])};

问题是,在同一项目的其他文件中,我想在全局范围内再次创建其他数组,其元素数量与 arr 中的元素数量相同。但是,如果没有办法“外部”枚举或#define,那么如何在 C99 中实现这一点。当然,可以在头文件中手动#define arr 的元素数量,然后在其他文件中使用它,但这非常不方便,因为通过更改数组 arr 中的元素数量,还必须手动更改#define 的值(当 arr 是一个结构数组时,这更加不方便)。

非常感谢您的帮助。

最佳答案

VLA 对此无济于事:它们需要是自动变量,因此您不能将全局变量设为 VLA。我同意 valdo 的观点,即拥有一个包含数组大小的全局变量(或者一个返回它的函数)是正确的方法。

关于c - 如何在 C99 中声明另一个文件中定义的全局数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376809/

相关文章:

javascript - HTML 选择元素中对象数组的多个 Angular 过滤器

c - 使用指针实现 strcat()

c++ - 可以通过重复函数调用来初始化 const std::array 吗?

php - 在 PHP 中将二维数组转换为 JSON

c - 如何在C中逐行读取由制表符分隔的双数据组成的10 GB txt文件

javascript - 检查 JavaScript 数组

ios - Swift 删除结构数组

c++ - 我可以用 C 包装 OpenCV 的 C++ 接口(interface),然后用 Lisp 的 CFFI 包装它吗?

android - 如何在c4droid中使用sd2原语和sdl2_gfx

c - C中两个指针之间的距离