这是双重铸造有效/正确的代码吗?

Luk*_*hne 1 c

int compare_acd(const void *a, const void * b) 
{
     return ( (int)(*((ADC_VALUE_TYPE*)a)) - (int)(*((ADC_VALUE_TYPE*)b)) );
}
Run Code Online (Sandbox Code Playgroud)

在我的情况ADC_VALUE_TYPEuint16_t,但就是不能排除.

unw*_*ind 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;
}
Run Code Online (Sandbox Code Playgroud)

这可能就是我写它的方式.