תכנות
—
שיעור 118
10/June/2010
C — Pre-Processing
ראינו קצת מהיכולות של ה"תהליך המקדים" של שפת
C
(C pre-processing).
לדוגמא:
-
#include foo.h
-
#define SOME_SYMBOL some text
-
#define SOME_VALUELESS_SYM
-
#ifdef SOMESYM
בדיקה אם SOMESYM מוגדר.
-
#ifndef SOMESYM
בדיקה אם SOMESYM
אינו
מוגדר.
בעזרת הוראות
pre-processing
אלה אפשר לדאוג שהכנסה
(include)
כפולה של קבצי header
לא תגרום להצהרות או הגדרות כפולות.
דוגמאות בתרגילים.
Make & Makefile
הכלי
make
הוא חזק ומורכב. ברֹב המקרים הוא משמש לבניית תכניות,
ומגדיר את שלבי הבניה והתלויות וגם תומך בגירסאות בנייה שונות.
בדרך כלל הוא מתיחס לקֹבץ Makefile בו נמצאות הגדרות המטרות, החוקים והתלויות
(targets, rules, dependencies).
הגדרות מדויקות, חוסכות שלבים מיותרים בבנייה חוזרת, כך שמבוצעים שוב רק השלבים הנחוצים.
הכלי make
בודק לשם כך, בין היתר את
זמני יצירת
הקבצים.
כמובן קיים
תיעוד מלא
.
דוגמאות בתרגילים.
תרגילים
-
הורד ופתח את
pdb-v9.tar.gz
במדריך
(directory)
חדש ונקי. הרץ
make
שאמור לבנות את התכנית
pdb-v9.
-
הבן כיצד נבנתה התכנית.
-
בקובץ
person.h
הורד את שלושת
(2+1 = 3)
השורות שמתחילות בסולמית
(#)
.
הרץ
מדוע הקומפילציה נכשלת?
-
(במדריך נקי וחדש, לאחר העתקה) שַנֵה את הגירסא מ- v9 ל- v10.
בצע
וְוַדֵא כי נוצרת התכנית
pdb-v10
והקֹבץ
pdb-v10.tar.gz
-
בקובץ Makefile
מוגדרות התלויות של קבצי
*.o
בקבץ
.c
המתאים, אבל חסרות תלויות בקבצי header.
הוסף את התלויות הדרושות.
-
למי שיספיק:
בטיפוס person_t קיים השדה:
char name[60];
שַנֵה אותו לְ
char *name;
זה כמובן ידרוש שינויים נוספים של הקצאה ושחרור זכרון.
-
ארוז את הקבצים לפתרון על ידי:
make tgz
שאמור ליצור את הקובץ
pdb-v10.tar.gz
אותו יש לשלֹחַַ.
חזרה לעמוד האם