是否可以将大数组声明为静态,并将其用作c中其他文件中的extern

时间:2012-03-17 23:57:58

标签: c arrays static extern

我有一个非常大的数组,它在vc项目的许多文件中的许多函数之间共享。我的问题是,我必须在 main()中声明它,并在头文件中使用 extern 。由于数组对于堆栈而言太大,我必须使用静态,因此无法在头文件中使用extern声明。

我该如何解决这个问题?

编辑:

我所做的就像你说的那样但我得到错误LNK2001:未解析的外部符号

这是我的全球声明和外部声明:

的main.c

static unsigned char bit_table_ [ROWS] [COLUMNS];

hdr.h

extern unsigned char bit_table_ [ROWS] [COLUMNS];

ROWS COLUMNS 可能会分别增长到1024和1048576

2 个答案:

答案 0 :(得分:5)

声明一个全局指针并在所有源文件中共享它(通过标头中的extern)。然后在main()中填充该全局指针。

编辑:

您对问题的评论似乎表明您将堆与堆混淆。只需使用标题中的extern声明,使您的数组全局并共享对它的访问权限。问题解决了,没有可笑的伎俩。

答案 1 :(得分:3)

通过使其成为static,您可以避免溢出堆栈(不涉及堆),但是将其放在main内,程序的其他任何部分都不能直接访问它。 / p>

要在同一程序中的函数和文件之间共享,必须在main之外进行定义,并在其中包含extern声明,并将其包含在需要访问它的其他文件中:

big_array.c:

#include "big_array.h"

int my_big_array[big_size];
在big_array.h中

 #define big_size 1234567

 extern int my_big_array[];

然后只需要访问它的任何其他文件:

#include "big_array.h"

// ...
my_big_array[1234] = new_value;