从另一个.c文件访问同一个结构实例

时间:2018-04-01 19:16:24

标签: c struct declaration extern definition

如何从second.c文件

访问first.c中定义的相同结构实例

最合适的方式是什么?

我们在first.h文件中添加了这样的内容:

typedef struct
{ 
    int a;
    double b;
} myStruct;

上面的代码表示新类型 myStruct 的定义,还有一个声明,因为它说编译器的结构存在于某个地方?

first.c 文件中,我们应该添加:

myStruct tmpStructure; //这里我们创建 myStruct 类型的实例并为其分配内存空间,这称为定义?

如果我们想要使用此 myStruct 类型的相同实例,那么在 second.c 中,我们应该添加:

extern myStruct tmpStruct; //会说我们的编译器在这个 second.c 之外的其他文件中有这种类型的定义,去外面搜索它。

所有这些功能是否都像'解释'?

1 个答案:

答案 0 :(得分:1)

你猜对了是完全正确的。您没有提到的一种常见方法是您还可以在头文件中添加以下内容:

extern myStruct tmpStruct;

在您定义变量的文件中没有损坏,并通知编译器(声明)在程序中其他位置定义的此类型的外部变量。因此,如果您的头文件最终读取:

typedef struct
{ 
    int a;
    double b;
} myStruct;

extern myStruct tmpStruct;

您可以在两个文件中使用tmpStruct而无需进一步声明(当然您需要仍然要在 first.c 中进行实际定义。此外,如果您更改了tmpStruct的类型,则会进行额外的安全检查,因为如果您在定义文件中更改它而不是在标题中更改它,则会出现错误,反之亦然。