2011-07-10 34 views
2

Android SDK(API級別8)中似乎沒有max()函數。 我錯了嗎?Android NDK中缺少「max(a,b)」

要求:

r = max(0, r-1); 

我不願意使用三元運算符,因爲它的時間關鍵 ,我不能肯定,編譯器將使用寄存器適當 (以避免重新計算R-1) 。

+2

我真的不明白。你在標題中提到了NDK,但是在你提到SDK的問題上。你可以解釋嗎? – Macarse

+0

嗨Macarse,這是C代碼,而不是Java。 – byromaniac

回答

1

爲什麼不直接寫if (r < 1) r = 0; else r -= 1;?這需要儘可能少的操作。

如果你有原子性的要求,我想你會有點困難,並使用臨時。

+0

只需添加'else r - ;' – phlogratos

+0

@phlogratos:謝謝,修正! –

+0

謝謝你Kerrek,一個優雅的解決方案。不確定它有助於更​​複雜的a和b,即表達式,但是一個很好的建議。 – byromaniac

0

它在數學包中。

嘗試:

r = Math.max(0, r-1); 
+1

感謝Brian,但我認爲這是Java代碼,而不是C. – byromaniac

0

如果你用C的時候,爲什麼不直接使用宏:

的#define MAX(A,B)(((A)>(B))? (a):(b))

r = MAX(0,r-1);

它可能有反正(它在GCC)

+0

嗨,Brian,因爲我擔心如果b是表達式,它將被評估兩次。 – byromaniac

2

我知道這是一個老帖子,但在NDK,經R 7b我能夠將其更改爲MAX編譯最大。希望這有助於某人 -

相關問題