#define ROUNDUP_SIZEOF(x) (((sizeof(x) + 3) / 4) * 4) void print_char(char c) { char s[2]; s[0] = c; s[1] = '\0'; print_string(s); } void myprintf(char *fmt, ...) { char *p = ((char*)&fmt) + ROUNDUP_SIZEOF(fmt); while (*fmt){ if (*fmt == '%'){ fmt++; switch (*fmt){ case 'd': print_int(*(int*)p); p = p + ROUNDUP_SIZEOF(int); break; case 's': print_string(*(char**)p); p = p + ROUNDUP_SIZEOF(char*); break; case 'c': print_char(*(char*)p); p = p + ROUNDUP_SIZEOF(char); break; } } else { print_char(*fmt); } fmt++; } } int main() { myprintf("TEST %d is %c %s ...\n", 99, 'x', "OK"); print_string("All done\n"); return 0; }