最近在看Asterisk的源代码,收获不小,决定记录下来学习Asterisk过程中的点滴,分享给大家,也方便我以后查阅……
今天让我感到意外的是Asterisk中对结构体初始化(或者说成是赋值)的使用。
比如定义结构体如下:
typedef struct ST {
int a;
int b;
pFun fun;
}ST;
一般的初始化是这样的:
ST t2;
t2.a=4;
t2.b=5;
t2.fun=test2;
而我在源码中看到的是这样的:
ST t1 = {.a=1,.b=2,.fun=test1};
感觉好强大。。。。。。
这里是我仿照着写的完整代码:
1 #include <stdio.h> 2 3 typedef void (*pFun)(int a); 4 5 typedef struct ST { 6 int a; 7 int b; 8 pFun fun; 9 }ST; 10 11 void test1(int a) 12 { 13 printf("test1 : %d\r\n",a); 14 } 15 16 void test2(int a) 17 { 18 printf("test2 : %d\r\n",a); 19 } 20 21 int main() 22 { 23 ST t1 = { 24 .a=1, 25 .b=2, 26 .fun=test1 27 }; 28 29 printf("%d\t%d\n",t1.a,t1.b); 30 t1.fun(3); 31 32 ST t2; 33 t2.a=4; 34 t2.b=5; 35 t2.fun=test2; 36 37 printf("%d\t%d\n",t2.a,t2.b); 38 t2.fun(6); 39 40 return 0; 41 }
这里存盘为test20120608.c,进行如下操作:
make test20120608 && ./test20120608
测试结果: