初始化C结构与分配成员



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

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

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使用指定的初始化器是最好的方法

最新更新