Оба эти утверждения эквивалентны?
С типами вариантов: возможно, нет.
Пример: a ? b : c
заставляет b
и c
преобразовываться в общий тип, но не с if then else
.
#include<stdio.h>
double foo(int x1, float x2, int x3) {
// Inexact conversions to float vv vv
return (x1 > x2) ? ((x1 > x3) ? x1 : x3) : ((x2 > x3) ? x2 : x3);
}
double bar(int x1, float x2, int x3) {
if (x1 > x2) {
if (x1 > x3) {
return x1;
} else {
return x3;
}
} else if (x2 > x3) {
return x2;
} else
return x3;
}
int main(void) {
printf("%f\n", foo(INT_MAX, 1.0f, 0));
printf("%f\n", bar(INT_MAX, 1.0f, 0));
}
выход
2147483648.000000
2147483647.000000
Или, возможно, ошибка компилятора при обоих подходах.
double foo2(int x1, float x2, int *x3) {
// error: invalid operands to binary > (have 'float' and 'int *')
return (x1 > x2) ? ((x1 > x3) ? x1 : x3) : ((x2 > x3) ? x2 : x3);
}