שיחה:C++/שלום עולם!

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

הreturn value של main, ועוד בעיות הרות גורל[עריכה]

מה בדיוק ההגיון בלהשמיט את "return 0"?

  • ב"The C++ Programming Language - 2nd Edition", עמוד 29, כתוב ככה: "The int value returned by main(), if any, is the program's return value to "the system"". If none is returned, "the system" will receive a random value. החוקים שונו מאז? יהיה נחמד לקבל reference. הערך המוחזר למערכת ההפעלה לא חשוב? לי הוא כן חשוב.
  • בלי קשר לשאלה הראשונה שהיא טכנית, השאלה המעניינת היא מה הרווח הלימודי מזה. ההקדמה לספר אומרת שמדובר בספר שמלמד מהבסיס (ואני נהיה סקפטי יותר ויותר לגבי זה, עם הזמן - לדעתי הספר לא בכוון לזה בכלל). אז צריך ישר להתחיל במשהו שהוא יוצא דופן לזה שreturn x הוא המחזיר ערך x מפונקציה? זה איכשהו יוריד מהבלבול של מישהו שעוד כמה פרקים יגיע בפעם הראשונה לפונקציות? הרי זה קהל היעד של הספר, לא? לדעתי זה מגוחך.
  • לקרוא לפני שכותבים זה כלל נחמד. זה נכון, אגב, גם לספרים אחרים מC++, וד"ל.

Thedsadude 15:18, 28 בינואר 2008 (IST)

על מה אנחנו מתווכחים?
  • אמרתי שהערך המוחזר לא חשוב? אני אישית תמיד כותב אותו. בכל אופן כדאי לך להתעדכן לגרסה חדשה יותר של הספר, בThe C++ Programming Language 3rd/Special Edition כתוב בפרק 3.2:

"The int value returned by main(), if any, is the program's return value to "the system". If no value is returned , the system receive a value indicating successful completion. A nonzero value from main() indicates failure."

כלומר אם אתה לא כותב return יוחזר אוטומטית 0.
  • בנקודה לפני האחרונה בהסבר על ה"שלום עולם" כתבתי שה-return לא הכרחי כאן, אף אחד לא דיבר עדיין על פונקציות. בקטע קוד ששינית הבאתי דוגמה לכך. אגב גם סטראוסטרופ מביא בתחילת הפרק השלישי פונקציה main ללא return. כשאני מסביר למישהו משהו, אני יוצא מנקודת הנחה שהוא אדם חושב (לעומת מערכת החינוך הישראלית שמונעת חשיבה), ואם כך יש להציג לו מגוון אפשרויות ולהסביר לו שזה, זה, זה וזה אפשרי, אילו יתרונות יש לכל האפשרויות ואילו חסרונות. הבדל בין ספר מלמד למדריך "תלמד תוך 21 יום" הוא שבשני מעלימים לך פרטים. אני כותב פה ספר ולא מדריך.
  • אני אף פעם לא טענתי שהספר מלמד מהבסיס. כרגע הוא באמת לא. אני לא יודע מי כתב את זה (איפה זה בכלל כתוב?). השאלה היא מהו הבסיס שממנו ברצונך ללמד? לטענתי ספר על שפת C++ צריך ללמד אך ורק את השפה, ולא כתיבת אלגוריתמים או מבנה המחשב והזיכרון. אם הקורא לא יודע שהזיכרון מורכב מתאים שגודלם בית אחד אז שיקרא באנציקלופדיה. כשהגעתי לויקיספר לפני חצי שנה הספר באמת היה מסכן. בזמן האחרון, מקווה ששמת לב, התחלתי להוסיף את הפרקים שילמדו "מהבסיס".
ybungalobill 16:40, 28 בינואר 2008 (IST)
שלום לך,
  • ראשית, נראה לי שצורת הדיון עכשיו עדיפה. ככה, אפשר לדון האם יש הבדלים בין גרסה 2 ל3, איך צריך ללמד בכל מקרה, וכו'. סלח לי, אבל לכתוב הערה קריפטית ועצבנית כמו "תקראו לפני שאתם כותבים, כי כתבתי שורה אחר כך אחרת" - מקדם את העניינים מעט מאד, לדעתי.
  • לגבי הreturn מmain
    • תודה על ההערה המחכימה לגבי ההבדל בין 2 ל3 (אגב, בהיסטוריית הדף תוכל לראות שזכרתי זאת במעומעם, אבל ליתר בטחון בדקתי בעותק החבוט שלי (מגרסה 2), וזה הטעה אותי). תמיד טוב ללמוד דברים חדשים, ועושה רושם שיש לך הרבה ידע ללמד.
    • אישית, עדיין הייתי משאיר את הreturn. מה שקורה זה שלמעשה main היא פונקציה יוצאת דופן, מפני שאם לא כותבים לה return אז "הקומפיילר כותב לה" אחד. בין אם תכתוב את זה ובין אם לא, הקורא חד העין יזהה כשיגיע לפרק על פונקציות שמשהו מיוחד קורה בmain. כדי שלא יסיק (בטעות) שבכל פונקציה אפשר להשמיט את הreturn (עם תוצאת החזרת ה0), תצטרך להוסיף עוד הסברים. בשביל מה? רק כדי לוותר על איזה return? לא נראה לי שהרווח גדול מספיק. אגב, main היא פונקציה יוצאת דופן גם בC, מפני שיש לה משהו דומה (אם כי לא זהה) לoverloading. בכל זאת, לא ראיתי אף מדריך לC שנותן את Hello, world! עם argc-ים למיניהם. אישית נראה לי שכל מה שמוסיפים לHello, world (כולל הערות האם אפשר להשמיט את הreturn) -גורע. מכל מקום, אין לי שום יכולת לעבור על הספר הזה בקרוב, ולכן אתה (כמובן) יכול לשנות את זה למה שאתה חושב לנכון.
  • לגבי הספר בכללותו:
    • אני זוכר שכשראיתי את הספר לראשונה, היה כתוב בדף ההקדמה שלו שהוא מסתמך על C. איכשהו זה נעלם מההקדמה, וגם התוכן מצביע על כך. התכוונתי לזה, ולא למבנה המחשב או דברים דומים.
    • עכשיו אני באמת מקווה לא לפגוע ברגשותיך, אבל:
      • באמת לא ברור לי למה לכתוב פרקים עם חפיפה כמעט מוחלטת לאלה של שפת C. מה ההבדל בין תנאי if בC לזה של C++? הבעיה זה עם זה שהדוגמאות משתמשות בprintf במקום cout? יש דרכים להתמודד עם זה. בעבר, אגב, היו דברים סופר-מעצבנים בC (כמו לדוגמה, ההכרח להצהיר על משתנים בתחילת בלוק), אבל זה כבר לא נכון מאז C99.
      • כפי שציינתי בעבר, אני מאד סקפטי לגבי המבנה של הספר. סטרוסטרופ ודומיו מלמדים C++ בגישה מאד מתמטית, ככה שכמעט אין פיצ'ר שנלמד לפני הפיצ'רים הנצרכים לו. ככה גם אני למדתי את השפה (מהספר שלו, אגב). שנים אחר כך, כשראיתי את הספר של koenig וmoo, טפחתי על המצח בתסכול. אני מאד ממליץ לך לעיין בו (אא"כ כבר קראת ולא השתכנעת).
ביי
Thedsadude 17:52, 28 בינואר 2008 (IST)
היי... לגבי ה-Accelerated C++‎, בדקתי את הספר ולא אהבתי אותו. הוא לא הספר הכי רע אבל אני עדיין מאוד סקפטי לגביו. לדעתי הוא לא מלמד C++, אלא הוא מלמד "תכנות עם STL Containers". הספר די שטחי ואין להשוותו לספרו של סטראוסטרופ למשל. לדעתי (ובסקירה ברשת התברר שלא רק לדעתי, לינק) הספר לא למתחילים, וכיוון שמבחינתי ספר למתחילים צריך לכסות את כל הנושא עליו נכתב הספר במלואו, אז אין מקום לספר "למתקדמים".
השיטה "הישנה" כבר הוכיחה את עצמה, תמיד מתחילים ללמוד מהבסיס מהדברים הפשוטים יותר. וכך בכל התחומים בחיים. אני לא רואה סיבה למה שספר זה לא יכתב גם הוא כך.
וזה שאפשר לכתוב retrun ב-main ואפשר לא לכתוב, תצטרך בכל מקרה להסביר איפשהו. זה רק שאלה איפה להכניס את זה. בפרק הזה כבר מילא הזכרתי את הreturn אבל כנראה באמת בפרק על פונקציות יש צורך לעשות תת-נושא "הפונקציה main".
וכשאני חולה אני באמת עצבני. ybungalobill 14:01, 30 בינואר 2008 (IST)

בעיה בהרצת תוכנית[עריכה]

שלום לכולם הורדתי את visual studio כמתואר באתר, כמו כן פתחתי פרוייקט ופעלתי ע"פ הצעדים הרשומים (בדיוק רב!) ניסית להריץ אץ התוכנית hello world על מנת לבדוק שהכל בסדר, וקיבלתי הודעה כדלקמן:

this application has faild to start because MSVCP90D.dll was not found. Re - installing the application may fix this problem

למישהו יש מושג מה זה אומר ואיך אני מטפל בזה???

כמובן שהתקנתי את המהדר לפחות 3 פעמים אבל ללא הצלחה כל פע אותה שגיאה....

חיפוש פשוט נותן את התשובה:
התקנת את הגרסה החינמית של Visual Studio Express... ואילו קבצי ה-DEBUG מופצים אך ורק בתשלום. כך שאו שתקנה את הגרסה המלאה או שתקמפל לRELEASE (בשביל זה לך למעלה בסרגל כלים ובחר בתיבה שכתוב בה Debug ותשנה אותה לRelease. זה אמור להריץ הפעם את התוכנית אבל ימנע ממך לעשות DEBUG נורמלי). 109.186.163.188 18:16, 27 במרץ 2010 (IDT)

Dev C++[עריכה]

הוספתי הוראות שימוש ב Dev C++.