嘿。我在头文件中有这个:
struct something {
int a;
int b;
};
int all[25][9];
此头文件包含在我项目中的所有3 .c文件中。其中一个文件(主文件)具有main函数,其他文件具有主文件中使用的函数。它们还使用extern类型variableName来使用在此主文件上声明的变量。但是,虽然我在主文件上声明了struct something *stuff;
以及稍后malloc它(并且这些其他文件直接使用此stuff
),但我的all
2d数组并未在任何地方声明头文件。我在其中一个额外的.c文件中使用此数组。这个all
数组会在每个数组中声明吗?我应该这样做吗?为了我的目的,必须在该头文件中引用all
。我应该将all
声明为all[][]
,然后在.c文件中为其指定大小,或类似的内容吗?
答案 0 :(得分:3)
如果您希望多个源文件共享一个名为all
的数组,您应该声明
extern int all[25][9];
标题和 中的
int all[25][9];
在一个的c文件中。
答案 1 :(得分:2)
使用extern关键字在标题中声明数组:
extern int all[25][9];
然后在其中一个实现文件中实例化它:
int all[25][9];
其他C文件包含标题,可以访问数组。
答案 2 :(得分:2)
你应该不这样做。这种方式在包含标头的每个源文件中创建all
的定义,并且不允许同一对象的多个定义(在实践中,您可能在每个源文件中获得all
的单独实例,或者他们可能都指的是同一个。)
相反,在头文件中,只放置声明:
extern int all[25][9];
然后在一个 C文件(可能是你提到的“主”文件)中,输入定义:
int all[25][9];
答案 3 :(得分:0)
在头文件中定义/声明为
EXT int a;
在主c文件中使用
#
define EXT extern
#include <a.h>
#undef EXT
这将避免单独的定义/声明