早先在看开源代码中学到的一个初始化结构体的技巧,今天刚刚用上。 特意整理了一下。
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
{
int a;
int b;
};
int fun()
{
struct _A aaa = {0};
aaa.a = 1;
aaa.b = 2;
return 0;
}
.file "fun1.c"
.text
.globl fun
.type fun, @function
fun:
pushl