שיחה:שפת C/הכנה

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
קפיצה לניווט קפיצה לחיפוש


נחיצות הפרק[עריכה]

לא ברור לי עד כמה הפרק הזה נחוץ, ובפרט לא בשלב כל כך מוקדם של לימודי השפה. אף שצריך לבצע include גם כדי לכתוב תוכניות פשוטות, הקורא יכול "לאכול" את זה בלי הסבר עד שיבין כיצד עובדת השפה, ואז אפשר להתחיל להסביר לו על ספריות. בפרט, לדעתי זה צריך להופיע רק אחרי הפרק העוסק בפונקציות (אבל לדעתי המקום הנכון הוא ממש לקראת הסוף). גדי אלכסנדרוביץ' 07:13, 9 פברואר 2006 (UTC)

אני חושב בדיוק ההפך ממך... התלבטתי אם להוסיף אותו לפני התוכנית הראשונה בתור פרק ראשון.

ההסבר לא מפורט מדי זה פשוט ידע בסיסי איך פועלת השפה וככה מהתחלה מבינים מה עושים בכל שורה ושורה בתוכניתחורחה 09:40, 11 פברואר 2006 (UTC)

אין בעיה להסביר גם בהתחלה מה עושה כל שורה בתוכנית, אבל כשכותבים על ספריות צריך לכתוב יותר מזה - למשל, איך כותבים ספריה משל עצמך, מהם קבצי אובייקטים, איך מקשרים תוכניות, מה עושה קומפיילר וכו'. לפני שמדברים על פונקציות אין בכלל מה לדבר על "איך כותבים ספריה משל עצמך" ולכן הפרק צריך להופיע בהמשך. בהתחלה מספיק להתייחס לספריות בשתי מילים, כי הן לא רלוונטיות לעקרונות הבסיסיים של השפה (בפרט, לא צריך את Stdio בשביל for). גדי אלכסנדרוביץ' 10:14, 11 פברואר 2006 (UTC)
עד עכשיו חשבתי שצריך...:/ אפשר אולי לעשות ספריות - בסיסי ולהשאיר מה שפה בשביל ההבנה הבסיסית ואחרי זה לעשות מתקדם... בכלל אני חושב שצריך לחלק את הספר לכמה חלקים שיהיו עוד נושאים ודפים...חורחה 10:31, 11 פברואר 2006 (UTC)
אם לדעתך יש עוד דברים להוסיף, אתה יותר ממוזמן לעשות את זה. מה שכן, אני לא חושב שיש צורך לעשות "ספריות בסיסי" כי הבסיסי הוא באמת כמה שורות שניתן להסביר כבר בחלק של ה-Hello World. גדי אלכסנדרוביץ' 10:40, 11 פברואר 2006 (UTC)
נראה לי שצריך גם ככה לעשות פרק של הכנה, מאיפה מורידים קומפיילר ואז אפשר לעשות גם הסבר כללי ושם לשלב את זה...חורחה 11:01, 11 פברואר 2006 (UTC)
אני מסכים שצריך פרק הכנה. מישהו מתנדב לכתוב? (שיכיל מידע על דברים חינמיים, כמו gcc ו-Dev-C++). גדי אלכסנדרוביץ' 11:36, 11 פברואר 2006 (UTC)
אני יסדר את זה בתבניות ויעתיק את ההתחלה מספריות אבל אני פשוט לא יודע איך לכתוב את זה 88.152.184.41 11:52, 11 פברואר 2006 (UTC). עריכה: אוקי סידרתי עכשיו רק צריך למלא בתוכן את החלק של התקנת הקומפיילר

התוספות לערך[עריכה]

אף שהתוספות מבורכות, אני לא בטוח שזה המקום בשבילן. פרק זה אמור לשמש כמבוא, ולאפשר לקוראים להיות מסוגלים להתחיל את הלמידה (כלומר, לדעת איך מקמפלים). לא בטוח אם צריך להכביד עליהם בפרטים שלא קשורים ישירות לשפת C כמו מה עושה קומפיילר באופן כללי. גם סקירה של הספריות הסטנדרטיות אין מקומה כאן, כי לא צריך אותה לפני שבכלל יודעים מה השפה ואיך כותבים בה דברים בסיסיים. אזכור של malloc הוא בכלל מיותר, כי הפרק שעוסק בזיכרון דינמי נמצא הרחק הרחק בהמשך. גדי אלכסנדרוביץ' 11:43, 27 מרס 2006 (UTC)

תראה, אני יודע שבד"כ נהוג ללמד בצורה הזו שפת C- קודם מנחיתים כמה דברים ורק אחר כך מסבירים אותם. אולם מניסיוני עדיף להסביר דברים בסיסיים, לבטח כמו כיצד עובד קומפיילר. ההבנה הראשונית הזו (והרי להבין כיצד עובד קומפיילר לא צריך באמת להבין ב-C) תעזור מאד לאנשים לגשת בכלל לתכנות. זו משמעותו של מבוא לדעתי. לגבי סקירת הספריות- דווקא לדעתי צריך להרחיב קצת לגבי המשמעות שלהן. בגדול אני חושב שאסור להנחית על הקורא דברים מבלי להסבירם. הוא רואה include מיד להסביר לו למה יש סולמית, ומה המשמעות. זה גם יתרון של ספר. תמיד ניתן לדלג ולחזור לעמודים פחות מובנים. --מקפץ גבעות 18:09, 27 מרס 2006 (UTC)

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

הבעיה העיקרית היא שאין פה הסבר כללי וסוקר על שפת C בכללה אלא ישר התחלה של הסבר על פקודות (וגם הן ללא פרוט מספיק). מספר הייתי מצפה ליותר. מהי שפת תכנות, היסטוריה קצרה, מהו קומפיילר ואיך עובדים איתו, כיצד יש לגשת לכתיבת תוכנית.--מקפץ גבעות 20:54, 27 מרס 2006 (UTC)

תשמע, אין נוסחת קסם. יש אנשים שכשהם קוראים ספר על תכנות היו רוצים לקרוא קודם את המבוא ההיסטורי, ויש כאלו שרוצים לגשת יש לאקשן. Kernighan ו-Ritchie (שהספר שלהם על C הוא פחות או יותר הסטנדרט) לא מבזבזים זמן על פרטי מימוש אלא ישר קופצים לשפה עצמה. אפשר לפתור את הבעייתיות על ידי הוספת פרק שעליו יוכלו הלא סבלניים לדלג שייקרא "מהי שפת תכנות?" או משהו דומה, ושם גם מתאים להכניס את ההסברים על מה עושה קומפיילר. כרגע כל מה שחובה שיוסבר גם בפרק הזה מהחלק שעוסק בקומפיילרים הוא השורה הראשונה. למי בדיוק אכפת שהקומפיילר עובר שבע פעמים על התוכנה? (אגב, זה נכון? זו אינוריאנטה של כל הקומפיילרים?)
ולדעתי, "הסבר כללי" צריך להיות כשמו כן הוא - כללי. לדבר על malloc ועל "הקצאת זיכרון דינמי" לא עושה את החיים יותר ברורים (או כלליים) למי שלא כבר מכיר שפות תכנות. גדי אלכסנדרוביץ' 07:32, 28 מרס 2006 (UTC)

תראה, זה מניסיוני. אי אפשר לנתק בין הכתיבה לבין הקימפול. הקורא צריך להבין בקווים כלליים מהו קומפיילר ומה מטרתו. מתכנת טוב מבין מה קורה מסביב ולא מתייחס לקומפיילר כאלה מאגיה שחורה. פרק מבוא הוא הפרק המיועד לרקע כללי, ועליו ניתן לדלג. לכן ראוי להכניס בו את הנקודות הללו כמו איך לגשת לכתיבת תוכנית, מה זה לקמפל ומהי C. מי שרוצה להתחיל לתכנת, יעבור לפרק הבא. אז אולי כדאי לצמצם את הדוגמות של הסיפריות, ואולי השבע פעמים הזה מיותר (נכון ל-GCC אבל דומני שזה הסטנדרט)- אבל בגדול, מי שרוצה ללמוד מאפס צריך קצת הבנה הקפית.

העניין הוא כזה: יש להבדיל בין מה שחיייבים לדעת לפני שמתחילים לעבוד עם C, שזה לדעת איך אפשר להפעיל קומפיילר ולדעת בכלל שצריך להפעיל קומפיילר, לבין להבין יותר ברצינות איך קומפיילר עובד. לדעתי צריך להפריד בין המקום שבו מסבירים את הדבר הראשון (כאן) ובין המקום שבו מסבירים את הדבר השני (פרק מבוא, או פרק נרחב יותר על מושגים כלליים בתכנות, שלא חייב להיות דווקא בספר הזה). גדי אלכסנדרוביץ' 13:14, 28 מרס 2006 (UTC)

סביבת פיתוח[עריכה]

למה Microsoft Visual Studio לא מומלץ למתחילים !?!? סביבת עבודה מצויינת, ממשק משתמש נוח, הקומפיילר בגרסות האחרונות כבר כמעט תקני, מנפה השגיאות מצויין, לא פגשתי יותר טוב. חבל שזה של מיקרוסופט ולא חינמי...

--Ybungalobill 14:29, 28 במאי 2007 (IDT)[תגובה]

יותר מדי תכונות, אתה גם לא צריך את הכל בשביל להתחיל...--Tharbad ‏ 18:57, 31 במאי 2007 (IDT)[תגובה]

למה cygwin?[עריכה]

קצת תמוה בעיני הקישור לאתר של cygwin, הרי עבור חלונות אפשר להשתמש בחבילת mingw, שכוללת את כל מה שצריך. למה לעשות את זה עם cygwin? Johnny Zoo 22:21, 10 באוקטובר 2007 (IST)[תגובה]

יתרה מזאת, לדעתי כדאי לסדר את החבילות לפי סדר כאב ראש: את הכי פשוטה להתקנה ולשימוש יש לשים ראשונה. מהרשימה הנוכחית, מדובר בCode::Blocks וב-Dev-C++. אם מתחילים יורידו את gcc בלבד, לא נראה לי שיהיה להם מושג לקמפל משורת הפקודה, ועוד בלי syntax highlighting... Mintz l 08:22, 11 באוקטובר 2007 (IST)[תגובה]
שיניתי את סדר החבילות, והחלפתי את הקישור ל-cygwin לקישור ל-mingw, בתוספת המלצה לעורך טקסט נוח. Johnny Zoo 19:03, 11 באוקטובר 2007 (IST)[תגובה]

סידור מחדש של הדף[עריכה]

סידרתי מחדש את הדף בגלל הסיבות הבאות: 1. לדעתי הדף ערבב דברים בהיררכיות שונות: מהדרים הופיעו לצד סביבות עבודה (שכוללות מהדרים לצד דברים אחרים). תכנות נחוצות, כמו מהדרים, הופיעו לצד כלי עזר, כמו דיבאגרים. 2. בדף הופיע הסבר נרחב על ספריות, שכלל הסברים על פונקציות ושאר דברים המוסברים הרבה בהמשך. העברתי את ההסבר על ספריות לדף חדש, ואשתדל לערוך אותו בעתיד.

Thedsadude 21:16, 22 בנובמבר 2007 (IST)[תגובה]


הספר הזה טוב רק לנושאים של מתחילים[עריכה]

אני לומד C, הנושאים של מתקדמים לא מובנים וחסר הרבה דברים של מתקדמים (במיוחד האיזור של מצביעים בפונקציות לא מבינים מזה כלוםםםם) רק בשנואים של המחילים הוא טוב

עוד משהו הספור הוא רק למשתמשי וינדוס למה אתם לא מלמדים בספר קודם את ספריות הבסיס של C(בלי קשר לשום מערכת הפעלה) ואחר כך עושים נושא של ספקיות של וינדוס ולינוקס אני מתשמש בלינוקס וספריות כמו conio לא קיימות בכלל בלינוקס

תעשו את כל הנושאים הרשונים נשואים רק של הבסיס ואחר כך נושאים לפי מערכות הפעלה

תצריך להוסיף עוד הרבה נושאים שחסרים הספר נראה כאילו הוא מושלם אבל הרבה נושאים חסרים בו --Kubiustos 13:18, 22 בפברואר 2008 (IST)[תגובה]

הקביעות העובדתיות שלך מופרכות לגמרי. קשה להאמין שקראת את הפרק אם אתה אומר ש"הספור [טעות במקור] הוא רק למשתמשי וינדוס". איפה ראית משהו על conio.h שמיועד לך בכלל? למעט נקודה זניחה שמיועדת למתכנתי וינדוס, אין כאן בכלל שום טיפול ב"ספקיות" (ספריות כנראה) וינדוס או לינוקס - רק בספריה הסטנדרטית.
גם ההערות הסתמיות שלך מוסיפות מעט מאוד. "צריך להוסיף עוד הרבה נושאים" - מה צריך להוסיף? לא ברור. "לא מבינים מזה כלום" - מי זה מבינים - אתה? מה בדיוק לא מבינים? לא ברור.
אגב, לאור דרישותיך לבהירות, נראה לי שלא יזיק לך להגיה (אפילו מינימאלית) את ההערה שלך, כמו גם לחשוב איפה לשים אותה (למה אתה שם הערות כלליות על נושאים מתקדמים בספר בפרק "הכנה"?). Thedsadude 20:35, 22 בפברואר 2008 (IST)[תגובה]
מסכים עם מה שאמר 217.132.77.144 וגם אוסיף:
אם אתה לא מבין נושאים של מתקדמים אז כנראה אתה עדיין לא מספיק מתקדם. תתרגל את הדברים הפשוטים יותר וכעבור זמן מה תחזור לנושאים המתקדמים. אם אתה ניסית ללמוד C לפי הספר הזה תוך יומיים ללא שום ידע קודם (נראה לי שבלעת את הספר הזה תוך שעה), אז לידיעתך, ללמוד שפת תכנות פשוטה כמו C לעומק לוקח לפחות 2-3 שבועות.
ybungalobill 18:06, 22 בפברואר 2008 (IST)[תגובה]


אני לא מבן למה כולם נופלים עלייייי בסך הכול רשמתי מה אני חושב.....
טוב תראה אני לא לומד C שעה ולא שבוע ואי לומד C בערך חודש וחצי
לא אמרתי שהספר לא טוב רק הבאתי כמה הערות שאני חושב
הנושא של מצביעים פה היה הכי מובן הכל מקום אחר שראיתי
אמרתי שהנושאים שאחרי זה(מתקדמים) לא כל כך מובנים וחסר בהם דבברים
במיוחד הנושא מצביעים בפונקציות שאחרי כמה פעמים שעברתי עליו לא כל כך הבנתי לך זה פשוט כי אתה יודע C טוב מאוד
אבל אני לומד וזה היה הנושא הכי לא מובן
גם ניהול זיכרון דינאמי לא היה כל כך מובן
עכשיו מה שאמרתי על וינדוס ועל לינוקס היה רק המלצה לעשות את כל ההתחלה הבסיס של C ואחרי זה לרשום על הספריות של לינוקס ווינדוס בנפרד
מה שהתכוונתי על נושאים שחסרים זה שיש נושאים שרשום בהם את זה:
פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה
שזה אומר שצריך להשלים את הנושאים האלה כי יש בחלקים של מתקדמים הרבה פעמים את זה שחסר נושאים בתוך הפרק
חסר נושאים בפרקים:
מצביעים
הקדם מעבד
מודלים
אולי יש בעוד אלה מה שאני זוכר
לא באתי נגד הספר
הספר מאוד עזר לי בסך הכול רשמתי על דברים שאני חושב--Kubiustos 16:01, 24 בפברואר 2008 (IST)[תגובה]
שלום,
(אף אחד לא רוצה להתנפל עליך.)
  • אני עדיין חושב שאתה טועה לחלוטין בקשר לענייני וינדוז/לינוקס.
  • עדיין לא ברור מה הנושאים החסרים (חוץ מהקדם-מעבד, שם הפרק מציין במפורש שחסרים נושאים).
  • (מה שיותר חשוב) לא הבנת משהו בדף של הקדם מעבד (לדוגמה)? כנס לדף השיחה שלו, וכתוב בדיוק מה לא הבנת.
  • לידיעתך, מצביעים הוא נושא מהותית יותר קשה מלולאות (לדוגמה), ונראה לי שאין מנוס מלשבת ולהזיע על כתיבת תוכניות מתסכלות עד שזה עובד. אין לזה תחליף, לדעתי.
כל טוב
Thedsadude 16:01, 24 בפברואר 2008 (IST)[תגובה]
את הנושא של מצביעים הבנתי זאת לא הבעיה
הבעיה שלי זה הנושא של מצבעים בפונקציות(השם של הנושא הוא:מצביעים, מערכים, ופונקציות לא התכוונתי לנושא מצביעים או מערכים או פונקציות)
הוא לא כל כך מובן(ותדע שאני לומד את הכול לבד מהאינטרנט ואני כן מזיע בשביל להבין דברים ולוקח זמן עד שמבינים)
אני לא הבנתי את הקטע של זה שהפונקציות נחשבות כמצביעים מה זה נותן אם תוכל להסביר לי את זה
תודה בכל מקרה על הספר עצמו שלמדתי ממנו הרבה(כמו את מצביעים שהבתי רק פה ולא בשום מקום אחר)
--Kubiustos 16:09, 24 בפברואר 2008 (IST)[תגובה]
שמח שטעיתי ושלא קראת את כל זה תוך שעה :) (יש אנשים שעושים את זה). על הספריות של לינוקס ווינדוס: הוזכרה כאן רק ספריה אחת והיא conio.h, רק על מנת שמשתמשי וינדוס יצליחו להריץ את התוכנית ולראות את הפלט לקונסולה (getch()). ספר זה הוא לא מקום ל-(ציטוט)"הספריות של לינוקס ווינדוס בנפרד". הספר מלמד את C התקני (pure C). ספריות של לינוקס ווינדוס יתפסו עוד שני ספרים שיהיו הרבה יותר גדולים מספר זה...
ומצביע לפונקציה הוא מצביע לכתובת בזיכרון שבו נמצא הקוד של הפונקציה. אתה צריך את זה בדיוק לאותה מטרה כמו גם מצביע רגיל. מצביע למשתנה מאפשר לך לתת למישהו (לפונקציה f למשל) משתנה שהיא לא יודעת איזה משתנה זה, כל פעם זה יכול להיות משתנה אחר. כנ"ל מצביעים לפונקציות, רק שהפעולה שאתה עושה איתם היא לא "לקרוא מהזיכרון/לכתוב לזיכרון" אלא היא פעולת הקריאה לפונקציה. אתה יכול לתת לפונקציה f מצביע לפונקציה שהיא לא יודעת בדיוק איזו פונקציה זו, אם תתן לה מצביע ל-g1 היא תקרא ל-g1 ואם תתן לה מצביע ל-g2 היא תקרא ל-g2.
מצביעים לפונקציות מאפשרים:
  • אלגוריתמים ג'נריים - למשל הפונקציה sort של הספריה התקנית של C מקבלת מצביע לפונקציה שמטרתה להשוות שני איברים במערכים שממויינים, כך אתה יכול למיין איתה כל טיפוס שתרצה.
  • CALLBACK - משתמשים בספריות על מנת לקרוא לפונקציות של משתמש הספריה. למשל הליבה של וינדוס או מערכת החלונאית של לינוקס משתמשים במצביע לפונקציה שלך כדי להודיע לך שהיה אירוע כלשהו. היא לא יודעת מראש איזה פונקציה תבקש ממנה לקרוא.
  • שימוש בפולימורפיזם ב-C - ניתן לדמות פולימורפיזם ב-C על ידי הוספת מצביעים לפונקציות מתאימות לתוך המבנים שלך.
ybungalobill 17:55, 24 בפברואר 2008 (IST)[תגובה]
לי עצמי אין כל כך זמן השבוע, אבל אני אנסה לכתוב משהו בפרק בשבוע הבא (מעבר למה שמשתמש:ybungalobill כתב כאן כמובן). ביי Thedsadude 19:49, 24 בפברואר 2008 (IST)[תגובה]

הספר עצמו מאוד עוזר, אבל..[עריכה]

לא הצלחתי להתקין שום דבר מהמהדר, המקשר, וכלום! אולי תתנו קישורים ישירים להורדה?

עזרה מעשית ועדכנית[עריכה]

מההערות לעיל, ובראיה לאחור, הדף נראה לי מוטה לכוון נכונות טכנית על חשבון הבנה מעשית למתחילים. מעבר לכך, חלק מהתוכנות המוצעות (Anjuta, לדוגמה), כבר כמעט אינן רלוונטיות. גם לי יש חלק רב בכך (בעריכות כThedsadude). שכתבתי לכן את הדף.

--Atavory (שיחה) 12:53, 30 באוגוסט 2019 (IDT)[תגובה]

Atavory מוזמן תמיד לשפר, --‏Illuyanka‏ 23:57, 31 באוגוסט 2019 (IDT)[תגובה]
Illuyanka, תודה! אשמח להערות על הגרסה המעודכנת. --Atavory (שיחה) 00:16, 2 בספטמבר 2019 (IDT)[תגובה]
Atavory בשמחה:
הרכיבים הנדרשים לפיתוח ב-C:
  • ספריות ומנפה שגיאות אינם הכרח לתכנות אלא כלים המקלים על העבודה - הייתי מעבירה תחת סביבת פיתוח.
  • הייתי מסבירה מה הכוונה סביבת פיתוח כלומר מציע כלים נוספים המקלים על התכנות.
  • תחת סביבת פיתוח - הסבר של שני הגישות אינו ברור - לתת דוגמות
  • סביבות פיתוח מבוססות רשת - הייתי מורידה מתחת סביבות פיתוח מותקנות לצד עבודה בעזרת רכיבים בסיסים יותר. מאחר שלא עם תוכנות אלו ילמדו אנשים כי לא ניתן להריץ בהם מודלים וכו.
  • סביבות פיתוח מותקנות - דווקא הסעיף החשוב ביותר ריק. לעיתים מרב שיש כל כך הרבה אפשרויות והאדם הפשוט אינו מבין בכל התוכנות עדיף לתת תוכנה שתים כמו Visual C++ Express שבה ניתן להעזר בכדי ללמוד את כל הפרקים מהספר. עדיף ווינדוס (בד"כ למי שיש לינוקס מבין יותר בתכנות) ואת כל יתר התוכנות לציין בפרק נפרד בסוף הספר כנספחים.
  • עבודה בעזרת רכיבים בסיסיים יותר - עורך טקסטים ותוכנות להפיכת קוד לתוכניות. הייתי או מעבירה להתחלה או מציינת ברכיבים הנדרשים לפיתוח ב-C.
בהצלחה. אם תרצה יש לי גם הערות לשלום עולם :). --‏Illuyanka‏ 23:36, 3 בספטמבר 2019 (IDT)[תגובה]
תודה על ההערות. ארגנתי מחדש את הדף בעקבותיהן. הערות על שאר הספר יתקבלו בשמחה. Atavory (שיחה) 18:58, 25 בספטמבר 2019 (IDT)[תגובה]

מישהו יכול בבקשה להסביר לי איך עובדים עם visual studio (או לחלופין לתת הצעה אחרת לשימוש בwindows)?[עריכה]

כשהתחלתי את לימוד הספר, הורדתי visual studio. זה היה לפני כמה חודשים, ומאז בכל מיני קודים שניסיתי לכתוב, קיבלתי הרבה מאד הודעות שגיאה. למשל, כל פעם שרציתי להשתמש בפונקציה scanf , הייתי צריך להוסיף לפניה את השורה #pragma warning(suppress:4996) (מצאתי באתר באינטרנט). דוגמה נוספת - אני לא מצליח ליצור פונקציה שתקבל מערך. אפילו אם אני נותן לה גם את הגודל, אני מקבל הודעות שגיאה משונות. תודה רבה, בנציון יעבץ (שיחה) 21:58, 15 במרץ 2021 (IST)[תגובה]