请问函数指针不定参改如何使用【已解决】

2019-03-24 17:15发布

本帖最后由 xingyu1156 于 2017-6-6 17:25 编辑

作死使用函数指针不定参,结果编译失败,求助诸位大佬。

函数指针指向函数原型是void cb(u16 val);


void ADCAdd(u8 chanBit, ...)
{
        va_list argp;                //定义保存函数参数的结构
        u8        channel = 0;

        va_start(argp, level);

        chanBit &= ~(~((u8)0) << 8);        //清不存在通道的无效位

        if (chanBit)
        {
                // AD IO配置
                ADCH |= LOBYTE(chanBit);                //通道选择

                Adc.ChannelS |= chanBit;        //载入通道

                do
                {
                        do
                        {
                                chanBit >>= 1;
                                channel++;
                        } while (chanBit);

                        //载入采样值处理函数
                        AdcCallback[channel - 1] = va_arg(argp, (void (*))(u16));
                } while (chanBit);
        }
        va_end(argp);

}



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lcofjp
1楼-- · 2019-03-24 18:22
函数指针的类型确实很复杂,一般人记不住,我也一样,所以一般都用函数指针的简化类型,即用typedef对类型进行简化。
typedef void (*XXCALLBACK)(u16 val);
这个XXCALLBACK就是这个回调函数的类型了,
然后再试试这种写法:
va_arg(argp, XXCALLBACK);
看看能不能解决问题。
xingyu1156
2楼-- · 2019-03-25 00:06
 精彩回答 2  元偷偷看……

一周热门 更多>