c-从其他文件访问结构数据成员的值



我在computer.h中有一个名为"状态";我在计算机中计算了一个值。c.我想访问这个确切的值,并将其打印在另一个名为display.c的文件中。

问题是我不确定如何访问该变量。我不允许更改display_status((的参数,我假设创建一个新的computer_data结构来访问该函数中的状态成员只会创建一个本地变量,不会起作用。

我不完全确定如何访问computer_data的值->display.c中的状态,如有任何帮助,将不胜感激。我会为状态创建一个getter函数吗?

computer.h

struct computer_data {
struct param *status;
}

computer.c

static void computer_assign_status(){
struct computer_data *computer = computer_get_data();
computer->status = calculateStat();
}

display.c

#include "computer.h"
void display_status(){
struct computer_data *computer = computer_get_data();

printf("computer->status: %d /n", computer->status);
}

注意:computer_get_data((作为函数也被定义为";struct computer_data*computer_get_data((">

使用get函数是一个良好的开端。你只需要在另一个文件中表明这一点。

computer.h中添加声明:

struct computer_data {
struct param *status;
}
struct computer_data *computer_get_data(void);

然后您可以在display.c中使用它。

但是,当然,对于打印status,不能使用%d格式说明符,因为它是指向结构的指针。

同样在computer.c中,您有一个错误:

struct void computer_assign_status(){

它应该只是void作为返回类型。

我会为状态创建一个getter函数吗?

这完全取决于您的需求。如果您想向调用方隐藏该结构中的所有其他内容,那么您可以提供一个只返回状态部分指针的函数。否则,您可以像现在一样返回指向整个数据结构的指针。

您的示例都无法访问在另一个编译单元中定义的任何数据。顺便说一句,你的例子写得很草率:比如struct void。在这里提问时付出更多的努力

您只能访问在其他编译单元中定义的全局(更确切地说是带有外部链接的静态存储(变量。

在计算机.h 中

struct computer_data {
struct param *status;
}
extern struct computer_data computer;

在computer.c 中

#include "computer.h"
struct computer_data computer;
void computer_assign_status(void)
{
computer.status = calculateStat();
}

显示.c

#include "computer.h"
void display_status()
{
printf("computer->status: %d /n", computer.status);
}

display.c中do:

extern struct computer_data * computer = computer_get_data()

相反。

这是因为使用extern关键字时,您使用的编译器将被迫在外部文件中查找变量。

最新更新