Download presentation
Presentation is loading. Please wait.
1
1 מבוא למדעי המחשב מבנה של תכנית
2
2 מבנה של תכנית – חלוקה לקבצים תכנית בשפת C הינה אוסף של הגדרות של: משתנים (חיצוניים) פונקציות ניתן לפרוש תכנית אחת על פני מספר קבצים. כל פונקציה חייבת להיות מוגדרת בשלמותה בקובץ אחד. יתרונות: פיתוח מודולרי של תוכנה. ניתן לקמפל כל קובץ בנפרד.
3
3 חלוקה לקבצים - קומפילציה נניח שתכנית כלשהיא מורכבת מן הקבצים, f2.c, f3.c f1.c. ניתן לקמפל את כל הקבצים בפקודה אחת. למשל ב- unix: gcc f1.c f2.c f3.c ביצוע פקודה זאת יגרום ליצירת הקבצים:, f2.o, f3.o f1.o וכן לאיחודם בתכנית אחת a.out. אם יש טעות קומפילציה, למשל ב- f2.c, ניתן לתקנה ואזי: gcc f1.o f2.c f3.o שימו לב שרק הקובץ f2.c יעבור קומפילציה מחדש ← חיסכון בזמן הקומפילציה!
4
4 חלוקה לקבצים הבעיה: מה אם פונקציה מוגדרת בקובץ אחד אך משתמשים בה בקובץ אחר? איך הקומפיילר ידע שאכן יש התאמה בין הטיפוס המוגדר של הפונקציה ובין הטיפוס שהסביבה הקוראת מניחה? ניתן לקמפל כל קובץ בנפרד ללא בעיה, אך רק בזמן ריצה תתרחש הטעות! למשל: ב- f1.c תוגדר הפונקציה double func (double x) { : } אך ב- f2.c תיקרא הפונקציה ע"י הפקודה int num=func(2);
5
5 חלוקה לקבצים הבעיה: מה אם פונקציה מוגדרת בקובץ אחד אך משתמשים בה בקובץ אחר? הפתרון: הצהרה על הפונקציה בסביבה בה משתמשים בה. שימו לב: ראינו כי הצהרות על פונקציות אינן חובה, אך כאשר פונקציה מוגדרת בקובץ אחד ונקראת בקובץ אחר, כדאי מאד לקובץ בו הפונקציה נקראת להצהיר על כל פונקציה שהקובץ משתמש בה. הרעיון: לגלות כמה שיותר טעויות בזמן קומפילציה ולא בזמן ריצה! בדר"כ מקובל לפרט הצהרות על פונקציות בקובץ כותרים (header file).
6
6 קובצי כותרים (header files) קובץ כותרים הינו קובץ המכיל הצהרות על משתנים חיצוניים ועל פונקציות בהם משתמשת תכנית. באופן מסורתי, שמו מסתיים ב-.h דוגמא: תכנית הבנויה משלושה קבצים f1.c, f2.c, f3.c פונקציה בשם func מוגדרת בקובץ f1.c. יש פונקציות בקבצים f2.c ו- f3.c המשמשות בפונקציה func. ההצהרה על הפונקציה func תישמר בקובץ נפרד (למשל, f.h). הקבצים f2.c ו- f3.c יטענו את הקובץ f.h (ובכך את ההצהרות בו) ע"י הפקודה: #include “f.h”
7
7 דוגמא נרצה לבנות ספריה של פונקציות מתמטיות (כגון power ו- factorial). נאגד את הפונקציות הללו בקובץ mathf.c. בנוסף, נבנה קובץ בשם mathf.h שיכיל את ההצהרות ל הפונקציות והמשתנים החיצוניים המוגדרים ב- mathf.c : extern int max_faxtorial; extern double factorial (int n); extern int power (int base, int n); בקובץ שבו נרצה להשתמש באחת מן הפונקציות המתמטיות הללו, נוסיף טעינה של קובץ הכותרים: #include “mathf.h”
8
8 קובצי כותרים (header files) משמעות ההנחיה #include “file_name.h”: בזמן קומפילציה יתייחס הקומפיילר לקובץ בו מופיעה ההנחיה כאילו במקום בו הופיעה המילה include – מופיעות בו למעשה ההצהרות שהן תוכן קובץ הכותרים. המרכאות הכפולות מציינות לקומפיילר שהקובץ אינו אחד מקבצי הכותרים הסטנדרטיים. כאשר טוענים קובץ כותרים סטנדרטי יש להשתמש בסוגריים משולשים. למשל: #include
9
חלוקה לקבצים – דוגמא /* mathf-main.c */ /* This program uses the mathf library functions */ #include #include "mathf.h" /* test the power function */ int main() { int i; for (i=0; i<max_factorial; i++) { printf("i=%d, 2^i=%d, i!=%ld\n", i, power(2,i), factorial(i)); } return 0; } /* mathf.h */ extern int max_factorial; extern int power(int base, int n); extern long factorial(int n); /* mathf.c */ /* A small mathematical library */ /* containing power and factorial */ /* external variable defined here: */ int max_factorial=10; /* power: raise base to n-th power; n>=0 */ int power(int base, int n) { int i, p=1; for (i=1; i<=n; i++) p = p*base; return p; } /* factorial: compute n! */ long factorial(int n) { long result=1; if (n max_factorial) return -1; else { while (n>0) result *= n--; } return result; }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.