这宏是什么意思 求教解决办法

这宏是什么意思 求教
C/C++ code
#define DECL_DYNCFUN(x) \
{#x,(DWORD*)&x,0,0}


PVOID ObpCreateHandle;
ATTRIBUTE funs[]={DECL_DYNCFUN(ObpCreateHandle)};

typedef struct ATTRIBUTE
    {
        char FunName[50];
        DWORD *FunVar;
        DWORD FunAddr;
        DWORD    bNeedHook;    
        DWORD    delta;
}ATTRIBUTE,*PATTRIBUTE;

define DECL_DYNCFUN(x) \
{#x,(DWORD*)&x,0,0}
这句是什么意思呢
ATTRIBUTE结构有5个成员 
定义结构变量为何只写DECL_DYNCFUN(ObpCreateHandle)就行了
基础不扎实 看代码相当吃力

------解决方案--------------------
使用编译器‘/P’选项,打开'*.i',搜索‘ObpCreateHandle‘,可以看到宏展开后为:
ATTRIBUTE funs[]={{"ObpCreateHandle",(DWORD*)&ObpCreateHandle,0,0}};
也就是 1 项。
------解决方案--------------------
宏就是替换
将DECL_DYNCFUN(x)的位置换成{#x,(DWORD*)&x,0,0}
#x代表将x指代的东西看成字符串
这样
ATTRIBUTE funs[]={DECL_DYNCFUN(ObpCreateHandle)};
就转化为
ATTRIBUTE funs[]={{"ObpCreateHandle",(DWORD*)&ObpCreateHandle,0,0}};
这个式子你就应该明白了吧
声明一个ATTRIBUTE的数组
这个数组的元素个数由后面的赋值语句决定
而赋值语句中只有一个实体
当然由于ATTRIBUTE是结构体
所以为数组赋值的{}中每个实体还要用{}限定一下
不过我觉得这个宏还是有问题
以为结构体重有5个元素
所以后面应该是少了一个0
------解决方案--------------------
后面应该有个0,.但初始化时可以省略(多个),省略的为0.