Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #define NEXT(ptr, type) *((type*)ptr)++
- void __print_int(int num)
- {
- int digits = logl(num)/logl(10), digit;
- int i;
- for (i = digits; i >= 0; --i) {
- digit = (int)(num / powl(10, i)) % 10;
- putchar('0' + digit);
- }
- }
- void __print_hex(int num)
- {
- int digits = logl(num)/logl(16), digit;
- int i;
- for (i = digits; i >= 0; --i) {
- digit = (int)(num / powl(16, i)) % 16;
- if (digit < 10)
- putchar('0' + digit);
- else
- putchar('A' + digit - 10);
- }
- }
- void __print_str(char* str)
- {
- while (*str)
- putchar(*str++);
- }
- void __print_char(char ch)
- {
- putchar(ch);
- }
- void my_printf(char* format, ...)
- {
- void *stackptr = &format;
- char specifier;
- NEXT(stackptr, char*);
- while (*format) {
- while (*format && *format != '%')
- putchar(*format++);
- specifier = *++format;
- format++;
- switch (specifier) {
- case 'i':
- case 'd':
- __print_int(NEXT(stackptr, int));
- break;
- case 'x':
- __print_hex(NEXT(stackptr, int));
- break;
- case 's':
- __print_str(NEXT(stackptr, char*));
- break;
- case 'c':
- __print_char(NEXT(stackptr, char));
- break;
- }
- }
- }
- void main(void)
- {
- my_printf("Das ist ein %s mit %d variablen und es wurden %d erwartet (Hier noch eine hex zahl %x) %c\n", "Test", 5, 5, 127, '!');
- my_printf("Das ist ein %s mit %d variablen, aber es wurden %d erwartet (Hier noch eine hex zahl %x) %c\n", "Test", 4, 5, 127);
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement