首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

enum 中施用 #define

2013-01-19 
enum 中使用 #define这是在 lwip 中的一段代码,看了之后虽然有些猜测,但总觉得不太对,所以发上来求高人指

enum 中使用 #define
这是在 lwip 中的一段代码,看了之后虽然有些猜测,但总觉得不太对,所以发上来求高人指点一下。
这个写法到底是什么意思?

enum {
    /* Get the first (via:
       MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/
    MEMP_POOL_HELPER_FIRST = ((u8_t)
#define LWIP_MEMPOOL(name,num,size,desc)
#define LWIP_MALLOC_MEMPOOL_START 1
#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0
#define LWIP_MALLOC_MEMPOOL_END
#include "lwip/memp_std.h"
    ) ,
    /* Get the last (via:
       MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */
    MEMP_POOL_HELPER_LAST = ((u8_t)
#define LWIP_MEMPOOL(name,num,size,desc)
#define LWIP_MALLOC_MEMPOOL_START
#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size *
#define LWIP_MALLOC_MEMPOOL_END 1
#include "lwip/memp_std.h"
    )
}

[解决办法]
定义的宏是为了 后面的#include做准备。
控制#include引入的代码的内容
[解决办法]
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。

[解决办法]
这个是LWIP里面的代码. LWIP的作者通过这种复杂的方式达到一种配置的目的. 
在数组/枚举定义里面用#define和#include语句这种用法很少见. 不过是可以通过编译,肯定也是正确的.

我们在理解上就把#include的文件原地打开即可.#define语句不影响语法.

使用lwip的时候,要自己建立一个lwippools.h文件
然后在里面配置内存POOL,如下:
LWIP_MALLOC_MEMPOOL_START 
LWIP_MALLOC_MEMPOOL(20, 256) 
LWIP_MALLOC_MEMPOOL(10, 512) 
LWIP_MALLOC_MEMPOOL(5, 1512) 
LWIP_MALLOC_MEMPOOL_END 
表示为动态内存堆相关功能函数分配 20 个 256 字节
长度的内存块,10 个 512 字节的内存块,5 个 1512 字节的内存块。

楼主的代码具体地来说.首先,这是定义一个枚举,包含了两个枚举item: MEMP_POOL_HELPER_START 和 MEMP_POOL_HELPER_LAST
而这两个枚举item的值是不确定的,是根据用户在lwippools.h的配置而不同的.
MEMP_POOL_HELPER_START表示256的那块内存,MEMP_POOL_HELPER_LAST表示1512的那块内存.

热点排行