4.9 - משתני ארגומנטים ומימוש printf - תרגול
תרגיל 1 - המקסימום מבין כמה מספרים¶
כתוב פונקציה int max_of(int count, ...) שמקבלת מספר שלם count ואחריו count מספרים שלמים, ומחזירה את הגדול מביניהם.
דוגמה להרצה:
תרגיל 2 - כתיבת my_printf¶
כתוב פונקציה void my_printf(const char *fmt, ...) שמתנהגת כמו printf ותומכת בתווי הפורמט הבאים:
%d- מספר שלם בבסיס עשרוני (כולל מספרים שליליים)%s- מחרוזת%c- תו בודד%x- מספר שלם בבסיס הקסדצימלי%%- סימן אחוז
אסור להשתמש ב-printf, sprintf או puts בתוך המימוש. הפונקציה היחידה שמותר להשתמש בה לפלט היא putchar.
דוגמה להרצה:
my_printf("hello %s, you are %d years old\n", "dan", 25);
my_printf("hex: %x, char: %c, percent: %%\n", 255, 'A');
תרגיל 3 - פונקציית לוג עם levelים¶
כתוב פונקציה void log_msg(const char *level, const char *fmt, ...) שמדפיסה הודעת לוג בפורמט [LEVEL] message, כאשר ההודעה עצמה נתמכת בכל תווי הפורמט של printf הרגיל.
הפונקציה צריכה להוסיף ירידת שורה בסוף בעצמה, כך שהקורא לא צריך לכתוב \n.
כאן מותר (ואף רצוי) להשתמש בספרייה - המטרה היא להבין למה אי אפשר פשוט להעביר את ה-... הלאה, ואיך משפחת ה-v פותרת את זה.
דוגמה להרצה: