Нет, встроенного нет. Обычно вы пишете собственную встроенную функцию, например,
static inline int max(int a, int b)
{
return (a > b) ? a : b;
}
(с использованием любого «встроенного» синтаксиса подсказок, который предпочитает ваш компилятор). В вашем случае, однако, вы могли бы просто объяснить это вручную - это достаточно просто:
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.