Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Studies

define# ו-const

define#

באופן כללי אין שום מניעה שמשתנים ישתנו לאורך התוכנית. למשל:

float f = 5.4;
int x;
scanf("%d", &x);
f += x;

מצד שני, לפעמים התוכניות שלנו יכילו קבועים שלא נרצה שישתנו לאורך ריצת התוכנית.

int main() {
    int radius = -1;
    printf("Enter circle radius");
    scanf("%d", &radius);
    printf("Circle area: %d", 3.14 * radius * radius);
}

התוכנית הזאת עובדת בצורה תקינה ומדפיסה השטח של המעגל, אבל יש בה בעיה - מהו 3.14? יתכן והצלחנו לזהות שמדובר בקבוע Pi, אבל יתכן גם שמישהו אחר שקורא את הקוד לא ידע על מה מדובר. לטובת כך אפשר להשתמש בהוראת קומפיילר בשם define#, הנראת כך:

#define PI 3.14
int main() {
    int radius = -1;
    printf("Enter circle radius");
    scanf("%d", &radius);
    printf("Circle area: %d", PI * radius * radius);
}

הוראה זו פשוטה - היא מספרת לקומפיילר שיש שם חדש בתוכנית בשם PI, והוא בתורו בכל מקום בו השם מופיע מחליף אותו בערך שנתנו לו. התוכנית עכשיו הרבה יותר קריאה - ברור שהכוונה היא לקבוע המעגל. נדגיש כי define# לא מגדיר משתנה חדש והקומפיילר לא מפרש את הערך הניתן לפי טיפוס מסוים - הקומפיילר מחליף מפורשות כל מקום בו כתבנו PI בערך שנתנו לו, 3.14.

ניתן להגדיר כל מה שנרצה ב-define#, למשל:

  1. #define MESSAGE "HELLO WORLD"
  2. #define MAX_STUDENTS 500
  3. #define ELEMENTS 1024

הערה: נהוג להגדיר define# בפורמט SCREAMING_SNAKE_CASE, עם אותיות גדולות בלבד עם _ בין מילה למילה.

const

אופציה נוספת היא המזהה const, קיצור ל-constant. בהצרה על משתנה. משתנה שמוגדר כ-const יבדק ע“י הקומפיילר - בכל מקום בו משתמשים בו, הקומפיילר יבדוק האם מנסים לכתוב אליו. אם ימצא כתיבה כזו, הקומפיילר יסרב לקמפל את התוכנית. זו דוגמא אחת מבן רבות שנפגוש לעזרה שהקומפיילר מציע לנו בכתיבת קוד.

const double pi = 3.14159;
double r1 = 5.4, r2 = 7.0
const double area = pi * r1 * r1;
// Line below will not compile if uncommented
// area = pi * r2 * r2;