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

标签 c struct declaration extern definition

如何从 second.c 文件访问 first.c 中定义的同一个结构实例

什么方式最合适?

我们把这样的东西放在 first.h 文件中:

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

上面的代码表示新类型 myStruct 的定义,同时也是一个声明,因为它表示编译器在某处存在这样的结构?

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

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

second.c 中,如果我们想使用这个 myStruct 类型的同一个实例,我们应该放:

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

所有这些功能是否像“解释”一样?

最佳答案

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

extern myStruct tmpStruct;

它不会损害您定义变量的文件,并通知编译器(声明)程序中其他地方定义的此类外部变量。因此,如果您的头文件最终显示为:

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

extern myStruct tmpStruct;

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

关于c - 从另一个 .c 文件访问相同的结构实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49601750/

相关文章:

c - 如何在 C 中声明指向结构的指针?

mysql - 在 MySQL 触发器中将值设置为变量

c - 添加分数的程序不会从 C 的每一行中获取?

c - #error 您现在需要定义 FIXED_POINT 或 FLOATING_POINT

c - 从c中的随机访问文件中读取

haskell - x 的多个声明

c - 解释一下下面的程序是如何工作的?

在函数 main() 中调用未定义的函数

c - 为什么这个 C 结构体代码可以工作?

go - 如何获取 golang proto 生成的复杂结构中的所有字段名称