您好,欢迎访问三七文档
1、#definea(x,y)+(x*2+y)aaa=(3a(1,1));运行后aaa==3+(1*2+1)===6;2、#defineIP_PCB\/*ipaddressesinnetworkbyteorder*/\ip_addr_tlocal_ip;\ip_addr_tremote_ip;\/*Socketoptions*/\u8_tso_options;\/*TypeOfService*/\u8_ttos;\/*TimeToLive*/\u8_tttl\/*linklayeraddressresolutionhint*/\IP_PCB_ADDRHINTstructip_pcb{/*CommonmembersofallPCBtypes*/IP_PCB;};宏定义IP_PCB下的多个变量由于在多个结构体中使用,故使用该宏定义,使用了\3、串口数据接收协议定义相应的结构体对协议进行说明,在接受的第一个字节时将数据流的地址赋值给结构体的首地址,这样每接收到一个字节的数据就会自动添加到结构体相对应的协议变量中,例1:typedefstruct{uint8_tstart_byte;//0x2uint8_taddr;uint8_tupdate_byte;//0x35uint8_ttype;//softwareorfontuint8_tdata_length[2];uint8_ts_data_pack_sn[2];uint8_tdata[10];uint8_tend_byte;//0x3uint8_tcheck_sum1;uint8_tcheck_sum2;}update_soft_datapack_t;update_soft_datapack_t*update_soft_datapack;uint8_tdata[14]={1,2,3,4,5,5,8,8,0x0a,0x0b,0x0b,0x03,0x31,0x32};uint8_t*datat;datat=data;*datat++=b;update_soft_datapack=(update_soft_datapack_t*)(data);在接受完毕之后,将所需数据传递给上一层的数据或同样定义的结构体如:uint8_tdata_next[3];memcpy(data_next,update_soft_datapack-data,3);。。。例2:当将某一个数组作为参数传递时强制转换为结构体时,定义如下typedefstruct{uint8_tstart_byte;//0x2uint8_taddr;uint8_tupdate_byte;//0x35uint8_ttype;//softwareorfontuint8_tdata_length[2];uint8_ts_data_pack_sn[2];uint8_tdata[10];uint8_tend_byte;//0x3uint8_tcheck_sum1;uint8_tcheck_sum2;}update_soft_datapack_t;update_soft_datapack_tupdate_soft_datapack;HandleUpdateSoftDatapack((update_soft_datapack_t*)s);//s为int*voidHandleUpdateSoftDatapack(update_soft_datapack_t*ind)4、/*********************************************************************//*************************struct链表结构**************************//*********************************************************************/structsys_timeo{structsys_timeo*next;u32_ttime;sys_timeout_handlerh;void*arg;#ifLWIP_DEBUG_TIMERNAMESconstchar*handler_name;#endif/*LWIP_DEBUG_TIMERNAMES*/};对于next下一结构体赋值时,通过判断是否为空添加入链表如for(t=next_timeout;t!=NULL;t=t-next){timeout-time-=t-time;if(t-next==NULL||t-next-timetimeout-time){if(t-next!=NULL){t-next-time-=timeout-time;}timeout-next=t-next;t-next=timeout;break;}}/*********************************************************************/typedefstruct{u8mac[6];//MAC地址u8remoteip[4];//远端主机IP地址u8ip[4];//本机IP地址u8netmask[4];//子网掩码u8gateway[4];//默认网关的IP地址vu8dhcpstatus;//dhcp状态//0,未获取DHCP地址;//1,进入DHCP获取状态//2,成功获取DHCP地址//0XFF,获取失败.}__lwip_dev;extern__lwip_devlwipdev;//lwip控制结构体__lwip_devlwipdev;lwip_comm_default_ip_set(&lwipdev);voidlwip_comm_default_ip_set(__lwip_dev*lwipx)5、对于结构体中函数调用的一种方法typedeferr_t(*netif_igmp_mac_filter_fn)(structnetif*netif,ip_addr_t*group,u8_taction);structnetif{structnetif*next;.......netif_igmp_mac_filter_fnigmp_mac_filter;........};netif-igmp_mac_filter=MulticastPerfectEnable;//MulticastPerfectEnable为相应的函数入口地址“err_tMulticastPerfectEnable(structnetif*netif,structip_addr*groupaddr,FunctionalStateNewState)”调用时函数为
本文标题:c语言各编程技巧
链接地址:https://www.777doc.com/doc-2908834 .html