如何从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 之外的其他文件中有这种类型的定义,去外面搜索它。
所有这些功能是否都像'解释'?
答案 0 :(得分:1)
你猜对了是完全正确的。您没有提到的一种常见方法是您还可以在头文件中添加以下内容:
extern myStruct tmpStruct;
在您定义变量的文件中没有损坏,并通知编译器(声明)在程序中其他位置定义的此类型的外部变量。因此,如果您的头文件最终读取:
typedef struct
{
int a;
double b;
} myStruct;
extern myStruct tmpStruct;
您可以在两个文件中使用tmpStruct
而无需进一步声明(当然您需要仍然要在 first.c 中进行实际定义。此外,如果您更改了tmpStruct
的类型,则会进行额外的安全检查,因为如果您在定义文件中更改它而不是在标题中更改它,则会出现错误,反之亦然。