2011-12-22 35 views

回答

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; 
} 

這可能是我怎麼會寫。

+0

我認爲,如果我刪除(int)它不會返回負值,因爲減去uint - uint總是非負數,或者我錯了嗎? – 2011-12-22 13:01:28

+0

這裏的隱含括號在哪裏。也許'(int)va - (int)vb'實際上就像'(int)(va - (int)vb)'?我可能是錯的,但我很偏執。我想我會寫'((int)va) - ((int)vb)' – 2011-12-22 13:15:48

+0

(別管我最後的評論)。這是安全的。演算將在減法之前進行。 http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence – 2011-12-22 13:17:36