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

xingyu1156   2017-6-5 13: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); } 本帖最后由 xingyu1156 于 2017-6-6 17:25 编辑

回复评论 (2)

2推荐 lcofjp 

函数指针的类型确实很复杂,一般人记不住,我也一样,所以一般都用函数指针的简化类型,即用typedef对类型进行简化。
typedef void (*XXCALLBACK)(u16 val);
这个XXCALLBACK就是这个回调函数的类型了,
然后再试试这种写法:
va_arg(argp, XXCALLBACK);
看看能不能解决问题。
点赞  2017-6-5 14:01
引用: lcofjp 发表于 2017-6-5 14:01
函数指针的类型确实很复杂,一般人记不住,我也一样,所以一般都用函数指针的简化类型,即用typedef对类型 ...

这个可以有编译可以通过
点赞  2017-6-5 14:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复