首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C结构中的默认值?

C结构中的默认值?
EN

Stack Overflow用户
提问于 2018-04-18 05:50:24
回答 2查看 0关注 0票数 0

我有这样的数据结构:

    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);

将我希望表达的信息传递给更新函数的最优雅的方法是什么?

EN

回答 2

Stack Overflow用户

发布于 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您显式地设置,而(安全地)忽略未设置的设置。

票数 0
EN

Stack Overflow用户

发布于 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档