Menu
CoddyTech

הגנות הכללה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 2 מתוך 61.

כאשר קובץ כותרת נכלל מספר פעמים בפרויקט, המהדר רואה שוב ושוב את אותן הצהרות, מה שגורם לשגיאות. הדבר קורה לעיתים קרובות כשכמה קבצים כוללים את אותה כותרת, או כשקובצי כותרת כוללים זה את זה. שומרי הכללה פותרים את הבעיה הזאת.

מגן הכללה משתמש בשלוש הנחיות קדם־מעבד כדי להבטיח שהתוכן של קובץ כותרת יעובד פעם אחת בלבד:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

כך זה עובד: #ifndef MATH_UTILS_H בודק אם הסמל MATH_UTILS_H עדיין לא הוגדר. אם הוא לא הוגדר, המעבד המקדים ממשיך ומגדיר אותו מיד באמצעות #define MATH_UTILS_H. כל מה שנמצא בין הנקודה הזו לבין #endif נכלל בקומפילציה.

בפעם השנייה שקובץ הכותרת הזה נכלל, MATH_UTILS_H כבר מוגדר, ולכן מדלגים על כל הבלוק. שם השומר הוא בדרך כלל שם הקובץ באותיות גדולות, כאשר קווים תחתונים מחליפים נקודות ותווים מיוחדים.

לכל קובץ כותרת שתיצרו צריכים להיות שומרי הכללה. זהו נוהג מקובל שמונע שגיאות קומפילציה ומבטיח שאפשר לכלול את הקוד שלכם בבטחה מכל מקום בפרויקט.

challenge icon

אתגר

קל

בואו נגן על קובץ כותרת מפני הכללה כפולה באמצעות הוספת שומרי הכללה. תבנו על כלי הברכה מהשיעור הקודם, אבל הפעם תוודאו שאפשר לכלול את קובץ הכותרת כמה פעמים בבטחה.

תיצרו שני קבצים:

  • greet.h: קובץ הכותרת שלכם, שמכיל את הצהרת הפונקציה greet. הפעם, עטפו את כל התוכן בשומרי הכללה באמצעות הסמל GREET_H.
  • main.c: הקובץ הראשי שלכם, שכולל את קובץ הכותרת, מממש את הפונקציה greet וקורא לה מתוך main().

הפונקציה greet צריכה לקבל פרמטר מסוג const char* עבור השם ולהדפיס:

Hello, Alice!

קובץ הכותרת שלכם צריך להיות במבנה הבא:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

תקבלו קלט אחד: שם (מחרוזת).

הדפיסו את הודעת הברכה בדיוק כפי שהיא מוצגת בפורמט שלמעלה, והחליפו את Alice בשם שהתקבל.

נסו בעצמכם

#include <stdio.h>
#include "greet.h"

// TODO: ממשו את הפונקציה greet שמדפיסה "Hello, <name>!"

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: קראו לפונקציה greet עם השם
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C אונליין