翻看到一个老早前的贴子,菜单相关的程序,研究里面的程序的时候深感吊爆了,里面有个宏定义函数找不到资料,特来请教万能的坛友。
帖子链接:
https://www.amobbs.com/thread-798580-1-1.html
查了一些相关资料,宏定义函数可以提高程序运行效率,一些短的函数可以用宏来定义,不但可心兼容不同的数据类型,可读性也较强。
比如取大值,求乘积
#define MAX(x,y) (((x)>(y))?(x):(y))
#define Q(x) (x)*(x)
调用的时候就象使用函数一样
int m=10, n=9, result=0;
result = MAX(m,n);
得出来的result = 10
result = Q(m+n);
得出来的result = 8100
看起来就是高大上。
但是这位大神坛友贴子里一段程序定义了一个宏函数,带 “{}”,花括号里面又带 “,” 这就完全看不懂了。
不知道这样的的宏函数要怎么理解,应该怎么拆分。
//U8 _CONST_ * _CONST_ TopItemCN[]=
U8 * _CONST_ TopItemCN[]=
{
{"功能"},
{"参数"},
{"测量"},
{"语言"},
{"测试"},
};
//U8 _CONST_ * _CONST_ TopItemEN[]=
U8 * _CONST_ TopItemEN[]=
{
{"Function"},
{"Parameter"},
{"Measure"},
{"Language"},
{"Test"},
};
//宏定义
#define MenuWhat(n) {(U8 **)n,(sizeof(n)/sizeof(U8 *)),0}
//图标层
_CONST_ struct Menu IcoMenu[] =
{
MenuWhat(TopItemCN),
MenuWhat(TopItemEN),
};
这个MenuWhat()是怎么个机制?
明白了,按照这样代进去,原来就是初始化结构体
struct Menu
{
// U8 _CONST_ **Text; //指向显示内容数组的指针
U8 **Text; //指向显示内容数组的指针
U8 TextNum; //项个数
void* (*Action)(); //对应的执行函数
};
宏定义在C里面有很多用法,你有兴趣可以参考论坛里傻孩子大神的状态机定义用法,能让你腾云驾雾
一周热门 更多>