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

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条回答
takashiki
1楼-- · 2019-12-27 20:44
 精彩回答 2  元偷偷看……
blavy
2楼-- · 2019-12-27 23:32
takashiki 发表于 2017-6-10 05:32
宏是最简单的,直接替换就是了:
//宏定义
#define MenuWhat(n) {(U8 **)n,(sizeof(n)/sizeof(U8 *)),0}

明白了,按照这样代进去,原来就是初始化结构体
struct Menu
{
//    U8 _CONST_ **Text;     //指向显示内容数组的指针
    U8 **Text;     //指向显示内容数组的指针
    U8 TextNum;         //项个数
    void* (*Action)();  //对应的执行函数
};
落叶知秋
3楼-- · 2019-12-28 02:11
二楼正解。
宏定义在C里面有很多用法,你有兴趣可以参考论坛里傻孩子大神的状态机定义用法,能让你腾云驾雾
Excellence
4楼-- · 2019-12-28 05:06
学习了。
Excellence
5楼-- · 2019-12-28 10:10
Q(m+n)是错的吧?应该是×
blavy
6楼-- · 2019-12-28 10:19
 精彩回答 2  元偷偷看……

一周热门 更多>