Lecture 2

  • Uploaded by: Baseem Najjar
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Lecture 2 as PDF for free.

More details

  • Words: 509
  • Pages: 6
‫מת"ם‬ ‫נושא‪ :‬עבודה עם מודולים‬

‫איך בונים בית?‬ ‫‪)1‬אדריכל‪ :‬עושה תיכנון‬ ‫‪)2‬קבלן שלד‬ ‫‪)3‬קבלן תשתיות‬ ‫‪)4‬אנסטילציה‬ ‫‪)5‬צבע‬ ‫‪)6‬רצף‬ ‫‪)7‬זגג‬ ‫‪)8‬נגר‬ ‫זה בדיוק כמו ה ‪ main‬שלנו ויש בו קריאות לשמונה‬ ‫פונקציות‬ ‫–כל פונקציה נמצאת בקובץ‬ ‫–קובץ ראשון ‪ main‬שיש בו קריאה ל‬ ‫פונקציות‬ ‫אדריכל‬ ‫–‬ ‫פונקציה‬ ‫שני‬ ‫–קובץ‬ ‫‪architecture.c‬‬ ‫–קובץ שלישי – קבלן ‪kablan_shetah.c :‬‬ ‫–קובץ רביעי‪...‬‬ ‫נרצא ליצור ‪ header‬בתוכם נצהיר על הפונקציות הנמצאות בקבצי ‪C‬‬ ‫ויכילו גם ספריות בהן נשתמש וכן מבנים – ‪ struct‬ומאקרואים‬ ‫שאלה‪ :‬נניח יש לנו ‪ 2‬קבצי ‪:H‬‬

‫אם נשים שני קבצים ‪ h1.h‬ו ‪ h2.h‬ואחד יקרא לשני אז זאת לא‬ ‫קריאה טובה כי יש תלות ביניהם‬ ‫יצרנו קבצי ‪ C‬וקבצי ‪ H‬מה עושים? קומפילציה של כל קבצי ה ‪C‬‬ ‫ומקבלים קבצי ‪)O )object‬‬ ‫בדוגמה עם בית יש לנו ‪ 9‬קבצי ‪C‬‬ ‫אחרי הקומפילצי נקבל ‪ 9‬קבצי ‪( O‬קבצים עם אותם השמות וסיומת‬ ‫‪)O‬‬ ‫שלב ניבא‪ :‬ביצוע קישור ‪LINK‬‬ ‫הלינקר מקשר את כל קבצי ה ‪ OBJECT‬לתוכנית אחת (כמו תוכנית‬ ‫המקבלת מקובץ יחיד)‬ ‫קובץ ‪ C‬אחד יכול לבקש שימוש ביותר מקובץ ‪ H‬אחד‬ ‫‪C1.h c2.h c3.h  compiling  c1.o c2.o c2.o  linking ‬‬ ‫‪c.exe‬‬ ‫כשיש בעיה ב ‪ HEADER‬לא תהיה בעיה בקומפילציה אלה ב‬ ‫‪ LINKING‬כי הואא זה שמקשר את ה ‪ HEADER‬לקבצי ה ‪C‬‬ ‫תוכנית הבנויה ממספר קבצים – סיכום‪:‬‬ ‫יש חשיבות רבה לחלוקת תוכנית לקבצים – ויש לחלק למספר‬ ‫קבצים לא גדול מדי ולא קטן מדי‬ ‫חשיבות החלוקה – תוכניות גדולות בד"כ נכתבת ע"י כמה צוותים‬ ‫ פונקיות נפרדות יכולות לשרת תוכניות שונות‬‫ קל לתחזק ולשרת תוכנית כזאת‬‫‪ -‬ניתן לקמפל רק קבצים שהשתנו (חוסך הרבה זמן)‬

‫הוראות קדם מעבד (‪)PP- PREPROCESSOR‬‬

‫‪)1‬לפני הקומפילצי מופעלת תוכנית שמעבדת את כבצח המקור‬ ‫‪)2‬הפקודות עבור ‪ PP‬מתחילות בסימן ‪#‬‬ ‫‪ !)3‬ההחלפה שנעשית ע"י ה ‪ PP‬היא טקסטואלי (ניתן להפעיל‬ ‫‪ PP‬על קובץ טקסט)‬ ‫איזה פעולות מתחיות ב ‪?#‬‬ ‫‪include#‬‬ ‫‪define#‬‬ ‫‪…ifdef#‬‬ ‫הפקודה ‪ define#‬מאקרו‬ ‫>…<‪#include‬‬ ‫‪#define N 300‬‬ ‫”‪#define ERROR “NOT GOOD‬‬ ‫(‪#define FOREVER while)1‬‬ ‫(’‪#define WAIT_FOR_ENTER while)getchar)( != ‘\n‬‬ ‫()‪Void main‬‬ ‫{‬ ‫;(‪Printf)ERROR‬‬

‫‪FOREVER‬‬ ‫{‬ ‫;(”‪Printf)“Shadow\n‬‬ ‫;‪WAIT_FOR_ENTER‬‬ ‫}‬ ‫}‬ ‫באופן כללי פעולת ‪ define#‬נראת כך‪:‬‬ ‫שדה ‪ 1‬שדה ‪#define 2‬‬ ‫שדה ‪ :1‬הטקסט שיוחלף‬ ‫שדה ‪ :2‬הטקסט שישובץ‬ ‫מומלץ להשתמש במאקרו – וגם להשתמש באותיות גדולות כדי‬ ‫שיהיה מובן‬ ‫במאקרו אפשר לרדת שורה ע"י שימוש ב \‬ ‫דוגמה‪:‬‬ ‫\‪#define ERROR “NOT‬‬ ‫”‪GOOD‬‬ ‫תוכנית‪:‬‬ ‫–קריאות‬ ‫–אין צורך להחליף ערך בתוכנית (כמו ‪)N 300‬‬ ‫מאקרו דוגמה‬ ‫(‪#define MAX)A,B( ))A>B(?A:B‬‬ ‫ניתן להתייחס ל ‪ A‬ן ‪ B‬כאל ארגומנטים של פונקציה פשוטה‬ ‫()‪Void main‬‬ ‫;‪Int x‬‬

X=MAX)3,4(; } PP ‫אחרי המעבר של‬ Void main)( { Int x; X=))3>4(?3:4(; } :‫דוגמה נוספת‬ #define SQR)X( x*x Int y; Float a=33; Y=)int(SQR)a(  y=a*a; Casting ‫ העובר רק על‬a ‫הראשון‬ 1 ‫תיקון‬ #define SQR)X( )X*X( Y=SQR)a+b(  y=)a+b * a+b(; ‫אבל זה לא מה שרצינו‬ 2 ‫תיקון‬ #define SQR)X( ))X( * )X(( Int i=2; Y=SQR)I++(  y=))++i(*)++i((

‫יגדיל את ‪ I‬פעמיים‬ ‫מסקנה‬ ‫יש לעבוד בזהירות רבה עם המאקרואים‬ ‫–שים לב כי אין ב מאקרוז משתנים גלובאלים‬ ‫–ה ‪ PP‬משבץ את הטקסט לקוד – מנפח אותו‬ ‫הוראת ‪INCLUDE‬‬ ‫יכולים לכלול קבצי *‪ H.‬בקובץ המקור‬ ‫>‪#include <stdio.h‬‬ ‫”‪#include “myheader.h‬‬ ‫כלומר קובץ *‪ c.‬יכלול את תוכן של הקובץ ‪ H‬שאליו נעשה‬ ‫‪INCLUDE‬‬

Related Documents

Lecture 2
October 2019 14
Lecture 2
May 2020 14
Lecture 2
May 2020 3
Lecture 2
November 2019 9
Lecture 2
October 2019 12
Lecture 2
November 2019 2

More Documents from ""

Lecture 2
April 2020 10
Questions 4
April 2020 9
Lecture 4
April 2020 18
Lecture 3
April 2020 12
Lecture 5
April 2020 19
9-borehole Seismic_lw.pdf
December 2019 8