我有一个非常大的数组,它在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
答案 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;