lwip--有趣的数组定义(预处理)

时间:2022-05-20 04:41:18 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
在全局定义的宏和在一个函数内部定义的宏有什么不同?是不是和变量的定义含义差不多,作用域不同?还是有其他的什么差别?

宏定义的作用域是同文件内从定义开始起作用 直到取消定义

static u8_t memp_memory[MEM_ALIGNMENT - 1

#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) #include "lwip/memp_std.h" ];

上面红色部分的即是一个宏定义,可单独拿开等同下面

#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )

static u8_t memp_memory[MEM_ALIGNMENT - 1 #include "lwip/memp_std.h" ];

memp_std.h文件中部分代码

#if LWIP_RAW

LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB")

#endif /* LWIP_RAW */

#if LWIP_UDP

LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB")

#endif /* LWIP_UDP */

#if LWIP_TCP

LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB")

LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN")

LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG")

#endif /* LWIP_TCP */ #undef LWIP_MEMPOOL


数组中的宏定义,可单独拿出来,与数组无关,因为用#define定义的宏是在预处理阶段进行处理的,而非编译时期进行

预处理,后面的include也是预处理。可以根据前面进行展开。 如果LWIP_RAW定义了

memp_memory[[MEM_ALIGNMENT - 1+ ( (MEMP_NUM_RAW_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct raw_pcb)) ) )] 如果LWIP_UDP定义了

memp_memory[[MEM_ALIGNMENT - 1+ ( (MEMP_NUM_UDP_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct udp_pcb)) ) )] 如果两者都定义了

memp_memory[[MEM_ALIGNMENT - 1+ ( (MEMP_NUM_RAW_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct raw_pcb)) ) ) +

( (MEMP_NUM_UDP_PCB) * (MEMP_SIZE + MEMP_ALIGN_SIZE(sizeof(struct udp_pcb)) ) )]

说明这个数组根据你是否定义LWIP_RAW等宏(这些宏实际可看做TCPIP各个模块,根据需要选择),数组的长度是可变的。

#define MIN( x, y ) ( ((x) < (y)) ? (x) : (y) ) #ifdefine MIN (正确) #ifdefine MIN(x,y) (错误) unsigned char a[]={

#define pi 3.14 //这个可以宏可以看做与数组无关 1,2,3,4 };




本文来源:https://www.wddqw.com/doc/2635ec7e4a7302768f993930.html