Menu
Coddy logo textTech

הגנות הכללה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 אונליין