您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > lwip--有趣的数组定义(预处理)
在全局定义的宏和在一个函数内部定义的宏有什么不同?是不是和变量的定义含义差不多,作用域不同?还是有其他的什么差别?宏定义的作用域是同文件内从定义开始起作用直到取消定义staticu8_tmemp_memory[MEM_ALIGNMENT-1#defineLWIP_MEMPOOL(name,num,size,desc)+((num)*(MEMP_SIZE+MEMP_ALIGN_SIZE(size)))#includelwip/memp_std.h];上面红色部分的即是一个宏定义,可单独拿开等同下面#defineLWIP_MEMPOOL(name,num,size,desc)+((num)*(MEMP_SIZE+MEMP_ALIGN_SIZE(size)))staticu8_tmemp_memory[MEM_ALIGNMENT-1#includelwip/memp_std.h];memp_std.h文件中部分代码#ifLWIP_RAWLWIP_MEMPOOL(RAW_PCB,MEMP_NUM_RAW_PCB,sizeof(structraw_pcb),RAW_PCB)#endif/*LWIP_RAW*/#ifLWIP_UDPLWIP_MEMPOOL(UDP_PCB,MEMP_NUM_UDP_PCB,sizeof(structudp_pcb),UDP_PCB)#endif/*LWIP_UDP*/#ifLWIP_TCPLWIP_MEMPOOL(TCP_PCB,MEMP_NUM_TCP_PCB,sizeof(structtcp_pcb),TCP_PCB)LWIP_MEMPOOL(TCP_PCB_LISTEN,MEMP_NUM_TCP_PCB_LISTEN,sizeof(structtcp_pcb_listen),TCP_PCB_LISTEN)LWIP_MEMPOOL(TCP_SEG,MEMP_NUM_TCP_SEG,sizeof(structtcp_seg),TCP_SEG)#endif/*LWIP_TCP*/#undefLWIP_MEMPOOL数组中的宏定义,可单独拿出来,与数组无关,因为用#define定义的宏是在预处理阶段进行处理的,而非编译时期进行预处理,后面的include也是预处理。可以根据前面进行展开。如果LWIP_RAW定义了memp_memory[[MEM_ALIGNMENT-1+((MEMP_NUM_RAW_PCB)*(MEMP_SIZE+MEMP_ALIGN_SIZE(sizeof(structraw_pcb))))]如果LWIP_UDP定义了memp_memory[[MEM_ALIGNMENT-1+((MEMP_NUM_UDP_PCB)*(MEMP_SIZE+MEMP_ALIGN_SIZE(sizeof(structudp_pcb))))]如果两者都定义了memp_memory[[MEM_ALIGNMENT-1+((MEMP_NUM_RAW_PCB)*(MEMP_SIZE+MEMP_ALIGN_SIZE(sizeof(structraw_pcb))))+((MEMP_NUM_UDP_PCB)*(MEMP_SIZE+MEMP_ALIGN_SIZE(sizeof(structudp_pcb))))]说明这个数组根据你是否定义LWIP_RAW等宏(这些宏实际可看做TCPIP的各个模块,根据需要选择),数组的长度是可变的。#defineMIN(x,y)(((x)(y))?(x):(y))#ifdefineMIN(正确)#ifdefineMIN(x,y)(错误)unsignedchara[]={#definepi3.14//这个可以宏可以看做与数组无关1,2,3,4};
本文标题:lwip--有趣的数组定义(预处理)
链接地址:https://www.777doc.com/doc-2886314 .html