#include <stdio.h>
int power (int i) {
int square (int x) {
return x * x;
}
int cube (int x) {
return x * x * x;
}
return (i) ? cube : square;
}
#define SQUARE 0
#define CUBE !0
int main () {
int (*cube) (int) = power (CUBE);
int (*square) (int) = power (SQUARE);
printf ("==================================\n"); printf ("square(5) = %u, cube(5) = %u, \n", square
(5), cube
(5)); printf ("==================================\n"); printf ("square(3) = %u, cube(3) = %u, \n", square
(3), cube
(3)); printf ("==================================\n");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgcG93ZXIgKGludCBpKSB7CgogIGludCBzcXVhcmUgKGludCB4KSB7CiAgICByZXR1cm4geCAqIHg7CiAgfQoKICBpbnQgY3ViZSAoaW50IHgpIHsKICAgIHJldHVybiB4ICogeCAqIHg7CiAgfQoKICByZXR1cm4gKGkpID8gY3ViZSA6IHNxdWFyZTsKfQoKI2RlZmluZSBTUVVBUkUgMAojZGVmaW5lIENVQkUgICEwCgppbnQgbWFpbiAoKSB7CgogIGludCAoKmN1YmUpIChpbnQpID0gcG93ZXIgKENVQkUpOwogIGludCAoKnNxdWFyZSkgKGludCkgPSBwb3dlciAoU1FVQVJFKTsKCiAgcHJpbnRmICgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAgcHJpbnRmICgic3F1YXJlKDUpID0gJXUsIGN1YmUoNSkgPSAldSwgXG4iLCBzcXVhcmUgKDUpLCBjdWJlICg1KSk7CiAgcHJpbnRmICgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAgcHJpbnRmICgic3F1YXJlKDMpID0gJXUsIGN1YmUoMykgPSAldSwgXG4iLCBzcXVhcmUgKDMpLCBjdWJlICgzKSk7CiAgcHJpbnRmICgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CgogIHJldHVybiAwOwogIAp9