3.7 הpreprocessor תרגול
תרגול – שלב 1: זיהוי תחליפים¶
-
כתבו קוד שמדפיס את השטח של עיגול, תוך שימוש במקרו
PI:שאלות:
-
מה קורה אם תעשו
#undef PIלפני השימוש? -
האם
PIמשתנה בזמן ריצה?
-
-
הגדירו פונקציית מקרו בשם
MAX(x, y)שמחזירה את הגדול מבין שני ערכים.
נסו להריץ את הקוד הבא:שאלות:
- מה יקרה אם תשתמש במקרוMAX(x++, y++)?
תרגול – שלב 2: תנאים והגנות¶
-
כתבו קובץ
.hעם ההגדרה הבאה:ואז בקובץ אחר כתוב:
#if VERSION == 1 int config = 100; #elif VERSION == 2 int config = 200; #else int config = 300; #endifשאלות:
-
האם תוכלו לשנות את הערך של
configרק על ידי שינוי המקרו? -
מה יקרה אם תשכח להגדיר את
VERSION? -
כתבו קובץ header עם הגנה כפולה רגילה (
#ifndef ...) וגם קובץ עם#pragma once.
הוכיחו שהם מונעים הכללה כפולה ע"י הכללת אותו קובץ פעמיים בתוכנית.
תרגול – שלב 3: שימושים מורכבים¶
-
הגדירו מקרו בשם
DEBUG_MODEבקובץ הראשי.
בקובץ.cאחר, כתוב בלוק קוד שנראה כך:שאלות:
- איך תוכלו לקמפל את הקוד עם
DEBUG_MODEמופעל – בלי לערוך את הקובץ?
(רמז: השתמש ב־gcc -DDEBUG_MODE)
- איך תוכלו לקמפל את הקוד עם
-
כתבו קוד שמשתמש ב־
#errorכדי למנוע קומפילציה אםVERSIONקטן מ־2.ודא שהקומפיילר באמת עוצר עם הודעת שגיאה.
תרגול – שלב 4: יצירת קוד גנרי¶
-
כתוב קובץ שבו יש הגדרה כללית של משתנה, כך:
עכשיו תכתוב קובץ
main.cשמכיל:בדוק איזה ערך מתקבל בפועל, ומתי כל אחד "מנצח".