int compare_acd(const void *a, const void * b)
{
return ( (int)(*((ADC_VALUE_TYPE*)a)) - (int)(*((ADC_VALUE_TYPE*)b)) );
}
在我的情况下ADC_VALUE_TYPE
是uint16_t
,但这不是规则。
答案 0 :(得分:5)
不需要外部括号,return
不是函数。
除此之外,我看不出有什么问题......你在取消引用之前投射指针,读取正确的位数,然后“向上转换”到int
。
更新:根据您的评论,您似乎想要一个否定回报,例如a
指向的值小于b
指向的值,因此您需要转换为签名类型。我想这很好,不是100%确定是否需要,但至少它很清楚发生了什么。
当然,为了更加清晰,它可以分解为多个语句:
int compare_acd(const void *a, const void * b)
{
const ADC_VALUE_TYPE va = *(ADC_VALUE_TYPE) a;
const ADC_VALUE_TYPE vb = *(ADC_VALUE_TYPE) b;
/* Cast to int to get signed response if a < b. */
return (int) va - (int) vb;
}
这可能就是我写它的方式。