【问题标题】:Initialize C struct vs assign members初始化 C 结构与分配成员
【发布时间】:2020-12-17 15:16:38
【问题描述】:

我想知道初始化结构成员的最佳做法是什么。

例如,对于这个结构,哪个选项更好,为什么?尤其是可读性和性能方面?

typedef struct
{
    int a;
    char b;
} str_t;

选项 1

void foo1(int param_a, char param_b)
{
    str_t str = {
        .a = param_a,
        .b = param_b
    };
    ...
} 

堆栈中省略的成员是什么,零或垃圾?

选项 2

void foo2(int param_a, char param_b)
{
    str_t str;
    str.a = param_a;
    str.b = param_b;
    ...
} 

此选项将允许零初始化(使用= {0};)。但我猜这会强制运行时分配,对吧?

奖金

另外,常数值会有所不同吗?

void foo1()
{
    str_t str = {
        .a = 5,
        .b = 10
    };
    ...
} 
void foo2()
{
    str_t str;
    str.a = 5;
    str.b = 10;
    ...
} 

【问题讨论】:

    标签: c software-design readability code-readability


    【解决方案1】:

    选项 1 有效。未提及的元素将被“零初始化”——给定一个默认值为零。它与函数中的static 变量一起正常工作。它应该是您的首选。

    选项 2 也有效。它可能会更慢。 static 变量完全不合适;每次调用函数时都会发生分配。

    奖励:在初始化程序中使用常量而不是变量对分析几乎没有影响 — 使用指定初始化程序的选项 1 是最好的方法。

    【讨论】:

    • 嗯,谢谢,我没有考虑static 变量。这也是一个好点。
    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多