Был удивлен, когда компилятор С съел вот такой забавный способ условного вызова функций:
#include <stdio.h> #include <math.h> int main() { int i; for (i = 0; i <= 1; ++i) { float a = (i ? floor : ceil) (10.5); printf("%d: %f\n", i, a); } return 0; }
Для С++ надо написать:
#include <stdio.h> #include <cmath> int main() { int i; typedef float (*f)(float); for (i = 0; i <= 1; ++i) { float a = (i ? (f)std::floor : (f)std::ceil) (10.5); printf("%d: %f\n", i, a); } return 0; }
или
#include <stdio.h> #include <cmath> int main() { int i; for (i = 0; i <= 1; ++i) { float a = (i ? std::floorl : std::ceill) (10.5); printf("%d: %f\n", i, a); } return 0; }
Все программы выводят:
0: 11.000000
1: 10.000000