带花括号和逗号的宏函数要怎么拆分

2019-12-27 18:56发布

翻看到一个老早前的贴子,菜单相关的程序,研究里面的程序的时候深感吊爆了,里面有个宏定义函数找不到资料,特来请教万能的坛友。
帖子链接: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()是怎么个机制?



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
blavy
1楼-- · 2019-12-28 15:31
落叶知秋 发表于 2017-6-10 14:48
二楼正解。
宏定义在C里面有很多用法,你有兴趣可以参考论坛里傻孩子大神的状态机定义用法,能让你腾云驾雾 ...

比如
[分享][交流][2017-5-30 Update] 整理了一个简洁的状态机模板
https://www.amobbs.com/thread-5668532-1-1.html

这贴子里好多宏,没一个看得懂的。。。。。
Excellence
2楼-- · 2019-12-28 18:02
blavy 发表于 2017-6-11 13:15
Q(m+n)=(m+n)*(m+n)=90*90=8100

10+9=《90》
blavy
3楼-- · 2019-12-28 23:22
Excellence 发表于 2017-6-11 18:34
10+9=《90》

哈哈,是我搞错了
Excellence
4楼-- · 2019-12-28 23:26
blavy 发表于 2017-6-12 10:24
哈哈,是我搞错了

呵呵呵。。。。。。。。。。。。。

一周热门 更多>