问个宏定义的问题

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.采纳回答
结贴,最后还是一个一个弄的。
wuxi_stl
2楼-- · 2019-12-26 19:02
 精彩回答 2  元偷偷看……
canspider
3楼-- · 2019-12-26 20:23
二楼从来没让人失望过
技术宅
4楼-- · 2019-12-26 23:15
wuxi_stl 发表于 2017-7-26 11:41
如果只是赋值的话,数组不可以吗?
GlobalValueBuff  = SEL[Nbr]

额。我发贴的时候偷懒了。 实际上SEL0 SEL1 SEL2 SEL3 SEL4 都是函数。不是常量。
不过用数组的话倒是可以用函数指针数组来做?
但是那样就不能用宏定义来定义SEL0了。
得用
void SEL0(void)
{
        函数内容
}

大神还有什么好方法吗。

gaolf_2012
5楼-- · 2019-12-27 02:49
可试试使用宏定义连接符 ##
hyz_avr
6楼-- · 2019-12-27 05:13
定义个函数指针数组,用SEL0,SEL1来赋值。
技术宅
7楼-- · 2019-12-27 06:30
 精彩回答 2  元偷偷看……

一周热门 更多>