c - 如何将结构成员定义为其他成员的总和

标签 c struct

有一些与此类似的问题(即 Define a struct with a member pointing to anothermember ),但是,考虑到我在 C 方面完全是菜鸟,我无法满足阅读这些问题的疑问,所以我打开自己的问题,期望有一些差异(如果没有,请向我指出一个正确的问题并将其作为骗局关闭)。

我想要实现的目标是不言自明的:

typedef struct  {
    int goals_as_visitor;
    int goals_as_home;
    int total_goals = goals_as_visitor +  goals_as_home;
} team

我只想将 total_goals 结构成员永久存储为其他两个成员的总和。上面的代码无法编译。我不知道我是否还没有找到如何做到这一点,或者这是否不可能。

有什么指导吗?

最佳答案

不,这是不可能的。 C 的定义大致就是存储空间的定义,仅此而已。如果你想确保该字段始终是第一个字段的总和,那么你需要一个纪律:每次修改其中一个字段时,你都必须修改第三个字段。在这方面,OOP语言更擅长这一点,C太基础了。不管怎样,你可以尝试在 C 中使用 OOP 风格,比如:

typedef struct Team  {
    int goals_as_visitor;
    int goals_as_home;
    int total_goals;
} team;

void setGoalAsVisitor(struct Team *this,int value) {
    this->goals_as_visitor = value;
    this->total_goals = this->goals_as_visitor + this->goals_as_home;
}

...
setGoalAsVisitor(&team,666); // Roughly calling a method on team: aka team.setGoalAsVisitor(666) in Java style
...

并约束自己不要直接使用这些字段。

注意:你可以隐藏很多东西来加强纪律,但可惜C可以让你做出令人讨厌的事情并违反规则......

关于c - 如何将结构成员定义为其他成员的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60629634/

相关文章:

c - scanf 在此 C 程序中无法正常工作

CudaMemcpy 不会将值从主机复制到设备

c# - C# 应用程序中的 Marshall.sizeof 和结构

algorithm - 从 Vec<String> 构建 UrlTree

使用 CL 编译多个文件

c - 如何对字符进行排序**?

c++ - 声明结构时的 vector 分配

C++ - 为什么静态字符串在被不同的函数引用时会给出略微不同的地址?

ios - Swift:使用 UISearchController/Predicates 过滤结构数组

php - 一起使用 c++ 和 php