#include /* saves time (no function overhead) but uses more space * since the macro is expanded on each call, also * the argument can be evaluated twice and cause problems * eg: isupper_m(p++), the soln is isupper(p); p++ */ #define isupper_m(c) (c >= 'A' && c <= 'Z') ? 1 : 0 /* uses more time bus saves on space */ int isupper_f(char c); int main(void) { printf("M: %d, m: %d\n", isupper_m('M'), isupper_m('m')); printf("F: %d, f: %d\n", isupper_f('F'), isupper_f('f')); return 0; } int isupper_f(char c) { return (c >= 'A' && c <= 'Z') ? 1 : 0; }