C中结构成员值的自我赋值

时间:2014-05-07 14:52:55

标签: c macros struct typedef

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

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

显然这不起作用。是否可以制作某种类型的预处理宏,或将结构包装在其他内容中,以便每次成员x,y更改时自动分配幅度?

是否存在某种商定的方法,或者是否有必要创建一个函数:

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

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

2 个答案:

答案 0 :(得分:1)

不幸的是,C不支持这种情况,也绝不会支持。 C是一种编程语言,它允许你做几乎所有事情,这意味着一切手动!

您可以做的最好的事情是创建宏的功能,为您自动更新:

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

答案 1 :(得分:0)

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

此外,从逻辑上讲,数学上magn是一个函数。它是一个具有两个其他参数的函数。在某种程度上制作一个处理这个值的函数似乎是合乎逻辑的孩子。