早先在看开源代码中学到的一个初始化结构体的技巧,今天刚刚用上。 特意整理了一下。
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。
方法二