标题和多个来源

时间:2010-12-19 23:12:04

标签: c header

嘿。我在头文件中有这个:

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文件中为其指定大小,或类似的内容吗?

4 个答案:

答案 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

这将避免单独的定义/声明