使全局结构指针可用于多个源文件

making a global struct pointer available to multiple source files

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

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

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

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

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

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

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

有人能告诉我最好的方法吗?

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

所以你的 header 会:

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

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

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

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

定义的外部对象和物理对象之间的实际"connection"将由链接器完成。