问个宏定义的问题

2019-12-26 18:52发布

本帖最后由 技术宅 于 2017-7-26 11:34 编辑

#define SEL0  1234
#define SEL1  45678
#define SEL2  4557
#define SEL3  214
#define SEL4  998



如上定义了几个宏定义。
正常情况下,我会这么写。

uint32_t GlobalValueBuff;

void assValue(Nbr)
{
        switch(Nbr)
        {
                case 0:
                {
                        GlobalValueBuff = SEL0;
                }break;
                case 1:
                {
                        GlobalValueBuff = SEL1;
                }break;
                case 2:
                {
                        GlobalValueBuff = SEL2;
                }break;
                case 3:
                {
                        GlobalValueBuff = SEL3;
                }break;
                case 4:
                {
                        GlobalValueBuff = SEL4;
                }break;
        }
}

但是如果宏定义多了,几十个,这样很麻烦。 需要写几十个case,太麻烦了而且容易出错。

请问有没有其他的办法进行带参数的宏定义调用对应的宏定义。
如#define VAULE_ASS(X)   SELX  这样的功能, 实际试验了一下,编译不过。无法根据形参调用对应的宏定义。
请高人指点。
10条回答
技术宅
1楼 · 2019-12-27 14:33.采纳回答
结贴,最后还是一个一个弄的。
liyang121316
2楼-- · 2019-12-27 11:26
把void assValue(uint32_t value)也改成带参数的宏,或者直接用BAT_SELECT(value) 代替 assValue(uint32_t value)。
xf331785508
3楼-- · 2019-12-27 18:05
你这种应用典型的函数指针数组,不知道为啥绕这么远。
wudicgi
4楼-- · 2019-12-27 20:15
你选择用哪个函数的参数是运行时才能确定的,就不要折腾宏定义了,编译时变量值都是不知道的
按楼上各位说的用函数指针数组吧,如果还不够就再写个函数查表

一周热门 更多>