logo

תהליך הידור ב-c

מה זה קומפילציה?

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

תהליך הידור ב-c

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

המעבד המקדים לוקח את קוד המקור כקלט, והוא מסיר את כל ההערות מקוד המקור. המעבד המקדים לוקח את הוראת המעבד ומפרש אותה. לדוגמה, אם , ההנחיה זמינה בתוכנית, ואז המעבד המקדים מפרש את ההנחיה ומחליף את ההנחיה בתוכן של 'stdio.h' קוֹבֶץ.

מערכת קבצים לינוקס

להלן השלבים שדרכם עוברת התוכנית שלנו לפני הפיכתה לצורת הפעלה:

    מעבד קדם מַהְדֵר אסמבלר קישור
תהליך הידור ב-c

מעבד קדם

קוד המקור הוא הקוד שנכתב בעורך טקסט וקובץ קוד המקור מקבל סיומת '.c'. קוד מקור זה מועבר תחילה למעבד הקדם, ולאחר מכן המעבד הקדם מרחיב את הקוד הזה. לאחר הרחבת הקוד, הקוד המורחב מועבר למהדר.

מַהְדֵר

הקוד אשר מורחב על ידי הפרה-מעבד מועבר לקומפיילר. המהדר ממיר את הקוד הזה לקוד assembly. או שאנחנו יכולים לומר שהמהדר C ממיר את הקוד המעובד מראש לקוד assembly.

אסמבלר

קוד ההרכבה מומר לקוד אובייקט באמצעות אסמבלר. השם של קובץ האובייקט שנוצר על ידי האסמבלר זהה לקובץ המקור. הסיומת של קובץ האובייקט ב-DOS היא '.obj,' וב-UNIX הסיומת היא 'o'. אם שם קובץ המקור הוא 'hello.c', אז השם של קובץ האובייקט יהיה 'hello.obj'.

מקשר

בעיקר, כל התוכניות שנכתבו ב-C משתמשות בפונקציות של ספרייה. פונקציות הספרייה הללו מורכבות מראש, וקוד האובייקט של קבצי הספרייה הללו מאוחסן עם סיומת '.lib' (או '.a'). העבודה העיקרית של המקשר היא לשלב את קוד האובייקט של קבצי ספרייה עם קוד האובייקט של התוכנית שלנו. לפעמים המצב נוצר כאשר התוכנית שלנו מתייחסת לפונקציות המוגדרות בקבצים אחרים; אז מקשר ממלא תפקיד חשוב מאוד בזה. זה מקשר את קוד האובייקט של קבצים אלה לתוכנית שלנו. לכן, אנו מסיקים שתפקידו של המקשר הוא לקשר את קוד האובייקט של התוכנית שלנו עם קוד האובייקט של קבצי הספרייה וקבצים אחרים. הפלט של המקשר הוא קובץ ההפעלה. שם קובץ ההפעלה זהה לקובץ המקור אך שונה רק בסיומת שלהם. ב-DOS, הסיומת של קובץ ההפעלה היא '.exe', וב-UNIX, ניתן לקרוא לקובץ ההפעלה בשם 'a.out'. לדוגמה, אם אנו משתמשים בפונקציה printf() בתוכנית, אז המקשר מוסיף את הקוד המשויך לו לקובץ פלט.

בואו נבין דרך דוגמה.

שלום.ג

 #include int main() { printf('Hello javaTpoint'); return 0; } 

כעת, ניצור תרשים זרימה של התוכנית לעיל:

תהליך הידור ב-c

בתרשים הזרימה לעיל, ננקטים הצעדים הבאים לביצוע תוכנית:

  • ראשית, קובץ הקלט, כלומר, hello.c, מועבר למעבד הפרה, והקדם-מעבד ממיר את קוד המקור לקוד מקור מורחב. ההרחבה של קוד המקור המורחב תהיה hello.i.
  • קוד המקור המורחב מועבר למהדר, והמהדר ממיר את קוד המקור המורחב הזה לקוד assembly. ההרחבה של קוד ההרכבה תהיה שלום.ס.
  • קוד ה-assembly הזה נשלח לאחר מכן ל-assembler, אשר ממיר את קוד ה-assembly לקוד אובייקט.
  • לאחר יצירת קוד אובייקט, המקשר יוצר את קובץ ההפעלה. לאחר מכן הטוען יטען את קובץ ההפעלה לביצוע.