结构体的初始化

时间:2021-10-16 19:50:15

早先在看开源代码中学到的一个初始化结构体的技巧,今天刚刚用上。 特意整理了一下。

struct _A
{
 int a;
 int b;
}

早先我所采用的方法(方法一)
struct _A A = {0};
A.a = 1;
A.b = 2;

 

现在所采用的方法(方法二),是从开源代码中所学会的, 定义结构体的同时初始化结构体成员变量

struct _A A = {.a = 1, .b = 2};

相比较方法一, 方法二明显简洁,清晰明了,唯一的不足之处在于增加了学习的成本,但我想这也是完全可以接受的。

 


PS:反汇编了一下两者的代码, 证明了我的猜想方法二的执行效率也明显高于方法一。
我不是效率偏执流,对我来说,程序的可读性,可维护性更为重要。


贴一下方法一的汇编代码。

 

 

 

这里同时也解决了我的另一个疑问,struct _A aaa = {0}; 到底是对结构体成员的第一个成员赋值为0,还是将所有的成员赋值为0?

从汇编代码中movl $0 -8(%ebp) movl $0 -4(%ebp) 两行来看,很明显是将所有的成员赋值为0。

 

 

 

 

方法二