繁体   English   中英

初始化 C 结构与分配成员

[英]Initialize C struct vs assign members

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

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

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;
    ...
} 

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

选项 2 也有效。 它可能会更慢。 它完全不适用于static变量; 每次调用函数时都会进行赋值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM