我有这样的数据结构:
struct foo {
int id;
int route;
int backup_route;
int current_route;
}
以及一个名为UPDATE()的函数,用于请求对其进行更改。
update(42, dont_care, dont_care, new_route);
这真的很长,如果我在结构中添加了什么东西,我必须添加一个‘不要’_关注每一次更新(...)。
我正在考虑把它传递给一个结构,但是用‘不要’来填充这个结构。_事先小心比在函数调用中拼写更繁琐。我是否可以在某个地方创建带有默认值“不关心”的结构,并在我将其声明为局部变量后设置我关心的字段?
struct foo bar = { .id = 42, .current_route = new_route };
update(&bar);
将我希望表达的信息传递给更新函数的最优雅的方法是什么?
发布于 2018-04-18 14:25:21
虽然宏和/或函数(如前所述)将起作用(并可能产生其他积极影响(即调试钩子)),但它们比需要的要复杂得多。最简单、也可能是最优雅的解决方案是只定义用于变量初始化的常量:
const struct foo FOO_DONT_CARE = { // or maybe FOO_DEFAULT or something
dont_care, dont_care, dont_care, dont_care
};
...
struct foo bar = FOO_DONT_CARE;
bar.id = 42;
bar.current_route = new_route;
update(&bar);
这段代码实际上没有理解间接方向的脑力开销,而且非常清楚哪些字段在bar
您显式地设置,而(安全地)忽略未设置的设置。
发布于 2018-04-18 15:40:23
可以将秘密特殊值更改为0,并利用C的默认结构成员语义。
struct foo bar = { .id = 42, .current_route = new_route };
update(&bar);
然后将0作为初始化器中未指定的BAR的成员传递。
或者,可以创建一个宏,该宏将为你执行默认初始化:
#define FOO_INIT(...) { .id = -1, .current_route = -1, .quux = -1, ## __VA_ARGS__ }
struct foo bar = FOO_INIT( .id = 42, .current_route = new_route );
update(&bar);
https://stackoverflow.com/questions/-100003921
复制相似问题