【问题标题】:making a global struct pointer available to multiple source files使全局结构指针可用于多个源文件
【发布时间】:2018-01-03 07:58:55
【问题描述】:

我在名为h1.h 的头文件中声明了一个结构,该结构包含在两个源文件c1.cc2.c 中。

typedef struct
{
    char binary_filename[256];
}programming;

我想创建这个结构的两个变量device1device2,然后声明两个指向每个变量的指针programmingPtr1programmingPtr2

我希望能够访问每个源文件中实例的成员binary_filename

我不知道应该在哪里声明这些变量和指针。

我应该在标题中将变量声明为extern 吗?

我读过this post,但它不处理指向变量的指针。

有人可以建议最好的方法吗?

【问题讨论】:

  • 您在C 文件之一中定义变量,并在另一个文件中将其声明为extern(或在标题中......取决于您的设计)

标签: c pointers struct scope extern


【解决方案1】:

您没有创建任何实例 - 它们只是全局范围内的两个独立结构。指针也是如此。您只需要使用关键字extern 通知编译器该对象是在其他地方定义的。当然你也需要有你的 typedef。

定义的外部对象和物理对象文本之间的实际“连接”将由链接器完成。

【讨论】:

    【解决方案2】:

    要在多个源文件中使用变量,您需要在所有相关源都包含的头文件中声明它们,然后在一个源中定义它们文件。

    所以你的标题会有:

    extern programming device1;
    extern programming device2;
    extern programming *programmingPtr1;
    extern programming *programmingPtr2;
    

    然后在 一个 源文件中,您将拥有:

    programming device1 = { "filename1" };
    programming device2 = { "filename2" };
    programming *programmingPtr1 = &device1;
    programming *programmingPtr2 = &device2;
    

    【讨论】:

    • 谢谢我试过了,我在源文件中得到了一个undefined reference to programmingPtr1'`?有什么想法吗?
    • @articsol 您需要将两个文件链接在一起。使用 FCC 将是 gcc -o program file1.c file2.c
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多