После публикации код не компилируется, поскольку в списке аргументов printf
отсутствуют запятые.
Вот исправленная версия с дополнительным интервалом для улучшения читабельности:
#include <stdio.h>
int compare(int a, int b, int c) {
if (a - b > 0 && a - c > 0)
return c;
else
if (b - c > 0)
return a;//what would it return?
else
return b;
}
int main() {
//below in printf? is it right to print this way?
printf("%d\n", compare(compare(88, 89, 91),
compare(90, 41, 17),
compare(75, 100, 96)));
return 0;
}
Этот код кажется нарушенным во многих отношениях, за исключением первоначальных синтаксических ошибок:
a - b > 0
выполняет целочисленное вычитание, которое может переполниться: знаковое арифметическое переполнение определено как имеющее неопределенное поведение в стандарте C.Было бы проще и безопаснее написать a > b
, который определен для всех значений a
и b
. compare(a, b, c)
, возвращает c
, если a
является наибольшим значением, a
если b
является наибольшим и b
, если c
является наибольшим ... Следовательно, результат сильно зависит от порядка заданных параметров.Можно задаться вопросом, а не было ли намерение вычислить максимальное значение триплета вместо этого, которое не будет зависеть от порядка параметров.
Интересно, что действительно ожидается от кандидата, столкнувшегося с этим тестом.