【问题标题】:Self assignment of struct member values in CC中结构成员值的自赋值
【发布时间】:2014-05-07 14:52:55
【问题描述】:

我目前正在学习 C,我想知道是否有一种非常优雅的方式可以让结构变量自行分配给它的成员变量。 即

typedef struct {
    double x; double y; double magn = sqrt(pow(x,2) + pow(y, 2));
} vector2d_t

显然这不起作用。是否可以制作某种类型的 pre-proc 宏,或者将结构包装在其他东西中,以便每次更改成员 x、y 时自动分配大小?

是否有某种商定的方法可以做到这一点,或者是否有必要创建一个函数:

void magnitude(vector2d_t *A){A->magn = sqrt(pow(A->x, 2) + pow(A->y, 2));}

并在每次创建新的 vector2d_t 时调用它?

【问题讨论】:

    标签: c macros struct typedef


    【解决方案1】:

    不幸的是,这在 C 中不受支持,并且永远不会支持。 C 是一种几乎可以让你做任何事情的编程语言,这意味着所有事情都可以手动完成!

    您能做的最好的事情就是创建自动更新的宏函数:

    void update_x(vector2d_t * v, double x) {
        v->x = x;
        v->magn = sqrt(pow(x,2) + pow(v->y, 2));
    }
    

    【讨论】:

    • 大概意思是v->magn = sqrt(...)
    【解决方案2】:

    您的magn 不是财产。它是一个取决于其他两个值的值。不仅不能自动完成,我认为它永远不应该自动完成。作为程序员,您可以选择何时以及如何更新此类值。懒惰地,无论何时访问它,或主动地,无论何时更改 xy。或者,您可能想定期更新它,例如,每当渲染一帧?

    此外,在逻辑上、数学上,magn 是一个函数。它是一个带有其他两个参数的函数。制作一个以某种方式处理该值的函数似乎是合乎逻辑的孩子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-20
      • 2021-05-19
      • 2016-11-05
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多