2010-12-19 84 views
0

嘿。我在头文件中有:标题和多个来源

struct something { 
     int a; 
     int b; 
}; 
int all[25][9]; 

此头文件包含在我的项目中的所有3个.c文件中。其中一个文件(主文件)具有主要功能,其他文件具有在主文件中使用的功能。他们还使用在此主文件中声明的变量,通过使用extern类型variableName。但是,尽管我在主文件中声明struct something *stuff;及以后的malloc,并且它的这些其他文件直接与此stuff一起工作,但我的all二维数组除了头文件外没有声明。我在这些额外的.c文件中使用这个数组。这个all数组是否会在每个数组中声明?我应该这样做吗?为了达到我的目的,必须在该头文件中提及all。我是否应该只声明allall[][],然后在.c文件上指定一个大小,或者类似的东西?

回答

3

如果你想多个源文件共享一个称为单一阵列all你应该在头声明

extern int all[25][9]; 

int all[25][9]; 

在c文件一个

+1

更重要的是,使用标头一个typedef所以你不要哪天结束与某人改变头和而不是定义,反之亦然。 – 2010-12-19 23:17:20

+0

@John Zwinck:在这种情况下,你应该得到一个编译错误,只要你在定义它的文件中包含头文件。 – caf 2010-12-19 23:58:15

2

使用extern关键字来声明在头阵列:

extern int all[25][9]; 

然后初始化它的实现文件的只有一个:

int all[25][9]; 

其他C文件包括报头和可以访问阵列。

2

你应该不是这样做。通过这种方式,在包含标题的每个源文件中创建一个all的定义,并且不允许同一对象的多个定义(实际上,您可能在每个源文件中获得单独的all实例,或者它们都可能引用一样的)。

相反,在头文件中,只放声明:

extern int all[25][9]; 

然后在一个 C文件(可能是你的 “主” 的文件你提到),将定义:

int all[25][9]; 
0

在头文件中定义/声明为

EXT int a; 

在th E MAIN C文件使用

define EXT extern 
#include <a.h> 
#undef EXT 

这将避免单独定义/声明