【问题标题】:Access to same structure instance from another .c file从另一个 .c 文件访问相同的结构实例
【发布时间】:2018-04-01 19:16:23
【问题描述】:

如何从 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之外的其他文件中有这个类型的定义,去外面搜索它。

所有这些功能都像“解释”吗?

【问题讨论】:

  • 这是正确的。 “去外面搜索它” - >错误。编译器不会搜索它。链接器会。
  • 是的,有道理,感谢指正

标签: c struct declaration extern definition


【解决方案1】:

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

extern myStruct tmpStruct;

它不会在您定义变量的文件中受到伤害,并通知编译器(声明)程序中其他地方定义的这种类型的外部变量。所以如果你的头文件最后是这样写的:

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

extern myStruct tmpStruct;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多