沒有,沒有一個建立在通常你會寫自己的內聯函數,例如
static inline int max(int a, int b)
{
return (a > b) ? a : b;
}
(使用編譯器偏好的任何'inline'提示語法)。不過,在你的情況下,你可能只是手工拼寫出來 - 這很簡單:
int height(struct node *tree)
{
int height_left, height_right;
if (tree == NULL) return 0;
height_left = height (tree->left);
heigth_right = height (tree->right);
return 1 + ((height_left > height_right) ? height_left : height_right);
}
N.B.小心最大的宏陷阱。人們很容易這樣做
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
然後你就可以使用,無論其類型的任何輸入,但這裏的問題是,如果任一輸入表達式有副作用,例如MAX(++i, ++j)
。然後問題是副作用將被評估兩次,無論哪個輸入是最大值。如果你打算編碼最大你必須使用(內聯)功能,而不是一個宏。不幸的是,因爲您使用C而不是C++而沒有重載/模板,這將限制您爲每個命名爲max函數的一組輸入/輸出類型。
來源
2011-02-16 14:25:50
Rup
這是錯的沒有`1 + ...` – 2011-02-16 14:33:42