משתמש:The duke/מבוא לתכנות של קבוצת בטא: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
שורה 81:
 
== התוכנה הראשונה: Hello World ==
מבוסס על מדריך מןמתוך [[מבוא לתכנות ולמדעי המחשב בשפת C/מבוא ותוכנית ראשונה|הקורס של אורי מוסנזון]]
 
אנחנו מוכנים לכתוב את תוכנית המחשב הראשונה שלנו. בגלל שמדובר בתחילת הלמידה, נכתוב את התוכנית הפשוטה ביותר שתבצע משהו שאפשר להבחין בו. באופן מסורתי נהוג לכתוב תוכנית שמדפיסה על המסך את המילים "Hello World" ([http://en.wikipedia.org/wiki/Hello_world_program Hello World]), רק כדי להבין איך נראה הקוד. ככה מתחילים ללמוד כל שפת תכנות.
=== עריכהכתיבת הקוד ===
נסו לכתובכתבו את הקוד הבא בעורך טקסט (ממש לכתוב, לא להעתיק ולהדביק. אחרת לא לומדים כלום.):
<source lang = "c" line="GESHI_NORMAL_LINE_NUMBERS">
#include <stdio.h>
שורה 99:
(מספרי השורות אינם חלק מהתוכנית. הם נועדו רק להסברים, כדי שאפשר להתייחס לכל שורה לפי מספרה)
 
שימרו אותו כקובץ בשם '''checkhello.c'''. (שימו לב! לינוקס מבדיל בין אותיות גדולות לקטנות.) פקודת השמירה באימקס היא C-X C-s.
 
'''הסבר''': למרות שמדובר בתוכנית פשוטה ביותר, כבר כאן נכללים הרבה אלמנטים שעדיין מוקדם לתת להם הסבר מלא. בשלב זה נסתפק בהסבר פשטני במקצת ובשלב מאוחר יותר ניתן את ההסבר המלא.
 
* בשורה 1, אנו אומרים לתוכנה להשתמש בספריה stdio. ככה מאפשרים שימוש באמצעי קלט\פלט - מקלדת ומסך (פרטים - בהמשך). שימו לב, לא מדובר במילה "סטודיו" אלא בקיצורב'''stdio''' - קיצור לSTandard Input Output.
* שורה 2 ריקה וכל תפקידה הוא להפריד בין חלקי הקוד. הקומפיילר מתעלם ממנה וכל תפקידה הוא להפוך את הקוד לקריא יותר.
* בשורה 3 אנו מצהירים על תחילתו של החלק הראשי של התוכנית שלנו, ה - הפונקציה main.
* שורה 4 היא פקודת הדפסה של המשפט "Hello World" על המסך. הסימון n\ מורה למחשב לעבור לשורה הבאה. שימו לב לסימן ה - ''';''' שמופיע בסוף הפקודה. נקודה-פסיק או [http://en.wikipedia.org/wiki/Semicolon semicolon] בלעז הוא סימון שמופיע בסוף כל פקודה לביצוע ב- C. סימן זה מאפשר לקומפיילר להבחין ולהפריד בין פקודות.
* שורה 5 מורה על הפסקתסיום main ויציאה מהתוכנית (- חזרה למערכת ההפעלה).
* שורה 6 סוגרת את "בלוק" הקוד של - main. התוכן שנמצא בין סוגריים מסולסלים - {...} מהווה קטע קוד בעל משמעות מסויימת. המשמעות נגזרת מההקשר כלומר הקוד ש"עוטף" את הבלוק. שוב, דוגמאות נוספות יבהירו את הרעיון.
 
'''אינדנטציה:''' כפי שבוודאי שמתם לב, שורות 4 ו 5 מוזזות לצד ימין. הזזה זו איננה נדרשת ע"י כללי השפה אבל היא עוזרת לאדם שקורא את הקוד להבין את המבנה הלוגי שלו. השם העברי לפעולה זו נקרא '''הזחה''' ובלועזית '''indentation''' (או אינדנטציה). בהירות הקוד כל כך חשובה שאינדנטציה הפכה למוסכמה בקרב אנשי המקצוע ולא מקובל לכתוב קוד שאינו מוזח.
 
קיימים עורכי טקסט שיודעים לבצע אינדנטציה באופן אוטמטיאוטומטי מתוך ידע עלפיענוח שפת התכנות הספציפית שבה כותבים.
 
הסיבה ששורות 4 ו 5 מוזזות היא ששורות אלה מהוות את התוכן של main. בכל פעם שקבוצת פקודות מסויימת מהווה חלק מוגדר בקוד, נזיח אותה ימינה בייחס לקוד העוטף. הדברים יהיו מובנים יותר אחרי שנראה דוגמאות נוספות.
 
'''צבעים:''' שיטה נוספת להגביר את קריאות הקוד היא שימוש בצבעים. עורכי טקסט מודרניים יודעים לצבוע בעצמם חלקים שונים בקוד לפי המשמעות התחבירית שלהם. לדוגמה, מספרים יצבעו בצבע אחד, מילים שמורות בצבע אחר וכוכו'. אין מוסכמה מקובלת לגבי אופן הצביעה. גם הקוד בויקי הזה נצבע אוטומטית לפי שיטת צביעה שהוגדרה עבורו.
 
=== קימפול (הידור) ===
פיתחו חלון טרמינל - המסך השחור שמאפשר לכם לתקשר עם המערכת. התוכנה שפועלת בטרמינל ובה כותבים כותבים את הפקודות נקראת shell ("קליפה").
פיתחו חלון shell (כלומר חלון שמאפשר ממשק command line), הגיעו לתקיית הקורס והדפיסו את השורה הבאה:
 
<syntaxhighlight lang = "text">
הקלידו בshell את הפקודה הבאה:
gcc check.c -o check
<syntaxhighlight lang = "textBash">
gcc checkhello.c -o checkhello
</syntaxhighlight>
[http://he.wikipedia.org/wiki/GCC gcc] הוא שם הקומפיילר בו נשתמש במהלך הקורס. קומפיילר, כזכור, הוא תוכנה המקבלת קובץ תוכנהקוד בשפה אחת ויוצרת קובץ תוכנה שקול בשפה אחרת. במקרה שלנו מדובר בקומפיילר המקבל תוכנית בשפת C ויוצר תוכנית שקולה מבחינת המשמעות בשפת המכונה שמעבד המחשב מבין. במילים אחרות, gcc '''מתרגם''' עבורנו את הקובץ שכתבנו ב C לקובץ חדש בשפת מכונה.
 
[[תמונה:gcc.png|center|500px]]
<br />
 
פקודת ה shell שכתבנו, מפעילה את התוכנה gcc ונותנת לה מספר פרמטרים. הפרמטר הראשון, checkhello.c הוא שם הקובץ בתקייה(בתוך התיקייה הנוכחית) שעליה לתרגם. הפרמטר השני o- מצייןמראה שישכי בדעתינואנחנו לקבועעומדים אתלציין שם קובץ הפלט (Output)- שם הקובץ בשפת המכונה שיווצר. הערך של הפרמטר השלישיהשני checkhello הוא שם הקובץ שינתן לקובץ בשפת המכונה. אם לא היינו מציינים את שם קובץ התירגום וכותבים רק <code> gcc check.c </code> היה ניתן לו שם של בררת מחדל - a.out.
 
לאחר, הפעלת פקודת התרגום שרשמנו למעלה, יווצר בתקייה הנוכחית קובץ חדש בשם checkhello. אם ננסה לקרוא אותו בעזרת Editorעורך טקסט או להתייחס אליו באופן אחר כקובץ טקסט, נקבל מידע חסר משמעות. הקובץ הזה מקודד באופן אחר (לפעמים מכנים אותו קובץ בינארי).
 
'''הערה:''' במהלך הקורסבהמשך נוסיף עוד פרמטר אחד לפקודת הקומפילציה שיגרום לקומפיילר להיות יותר קפדן מבחינת ההערות שייתן. הפרמטר Wall- הוא קיצור של all warnings כלומר, דרישה שהקומפיילר יתריע בפנינו בכל מקרה שהוא רואה בעיה, גם עם לא מדובר בשגיאה ממש. הדרישה הזאת תעזור לכם מאוד לאתר תקלות חמקמקות במיוחד. פקודת הקומפילציה בה השתמשנו תראה כך:
<syntaxhighlight lang = "text">
gcc -Wall checkhello.c -o checkhello
</syntaxhighlight>
 
=== הרצה ===
 
הקובץ checkhello הוא קובץ ריצה, הוא כתוב בשפה שאותה המעבד שלנו יודע לבצע. בשביל להריץ את הקובץ checkhello אפשר ללחוץ עליו לחיצה כפולה בסייר קבצים (ממשקתוכנה guiגרפית כגון thunar או konqueror בלינוקס) או לכתוב את שמו בשורת הפקודה. לא

כתיבה תמידבשורת כתיבההפקודה לפעמים תיתן שגיאה, מ[[למה בלינוקס צריך לציין תיקיה נוכחית בהרצת תוכנה| כזאתשיקולי תצליחאבטחה]].

לפעמים מערכת ההפעלה מוגדרת כך שהיא לא מחפשת קבצים להרצה בתיקייה הנוכחית. אם אנחנו נמצאים באותה תקייה בה מצוי check וכותבים בשורת הפקודה:
<syntaxhighlight lang = "text">
check