פורסם 2007 בדצמבר 2917 שנים שלום,חיפשתי בפורום אך לא מצאתי תשובה מדוע ב-C ו-CPP ה-main חייב להחזיר int וזה לא נכון לכתוב שהוא לא יחזיר כלום (void)?לפי מה שהבנתי זה קשור איכשהו לזה שאם אין שגיאות הוא מחזיר 0.תודה מראש!
פורסם 2007 בדצמבר 2917 שנים ככה הוגדר ב ANSI Cכנראה בגלל שמערכת ההפעלה צריכה לדעת איך התוכנה הסתיימה. כאשר אתה מחזיר 0 אתה בעצם מחזיר למערכת ההפעלה שהתכונה שלה הסתיימה בהצלחה, כל מספר אחרת פרט ל0 אומר שהייתה בעיה כל שהיא בזמן הריצה הל שתוכנית.http://users.aber.ac.uk/auj/voidmain.shtml
פורסם 2007 בדצמבר 2917 שנים לא שזה לא נכוןזה לא מקובל מסיבות מסויימותאם יש לך נכונות להבין למה ואתה באמת רוצה להעשיר את הידע שלךואין לך בעיה באנגליתמאווד מומלץ לקרוא את זה:http://www.eskimo.com/~scs/readings/voidmain.960823.html
פורסם 2007 בדצמבר 3017 שנים לא שזה לא נכוןזה לא מקובל מסיבות מסויימותזה לא נכון. התקן מגדיר היטב את הנושא. זה כאילו שאמרת ש-int x = 3;f (x++, x);זה כמו f(3,4). לפעמים זה פועל, אבל אפילו אם זה פועל זה עדיין לא נכון.
פורסם 2008 בינואר 117 שנים את ההגדרה למה שאמרת אפשר לשכתב ללא מקובלאם זה פועל זה נכוןאם זה לא מה שעושים וצריכים לעשותזה פשוט לא מקובלנקודהסוף סיפור
פורסם 2008 בינואר 217 שנים זה לא "לא מקובל", זה לא נכון. התקן קובע אחרת.ועובדה שזה לא תמיד פועל (קרא את הלינק ש-MasterDK נתן).זה שהיום זה פועל, לא אומר שמחר זה גם יפעל.הגישה של "אם זה פועל זה נכון" היא מה שגרם לכך שחצי מהאתרים הישראלים היום לא עובדים בפיירפוקס.למה? כי לפני שלוש שנים כל האתרים נכתבו לפי אינטרנט אקספלורר ולא לפי התקן, כי מי כבר משתמש בדפדפנים שאינם אינטרנט אקספלורר? ואז נוצר מצב ש-30% מהגולשים לא מסוגלים להיכנס לאתרים האלה.
פורסם 2008 בינואר 217 שנים שובלא אמרתי שאתה טועהאמרתי שההגדרה שלי ושלך מתאימה לצמד המילים "לא מקובל"הקודים שלא נרשמו כתקן פועלים לכן הם נכונים מבחינה טכניתאך מבחינה ביצועים לא משתמשים בהם ולא אמורים להשתמש בהםכי היעוד של פונקציית הMAIN הוא עם ערך מוחזר ולא עם ווידואני חוזר על עצמילא אמרתי שאתה טועהההפךאני איתך ואתה צודק באלף אחוז
פורסם 2008 בינואר 417 שנים int main טוב בגלל:א) על פי הסטנדרט יש להחזיר intב) ייתכן שפונקציית התיחול והעלייה- ה-startup , עשויה להניח שהערך המוחזר של הפונקציה ()main ,יידחף למחסנית.כאשר הפונקציה ()main לא עושה כך, ייתכן שתיווצר בעיה על המחסנית, דבר אשר יגרום ליציאה לא סדירה מהתוכנית ואפילו לקריסה.ג) כנראה שכאשר כותבים ערך מוחזר מסוג void חוזר ערך מוחזר אקראי למערכת ההפעלה, דבר אשר אנו מעדיפים להמנע ממנו.מדוע אפשר להשתמש בערך מוחזר void:א) הרוב ביננו משתמשים במערכות ההפעלה של מיקרוסופט (עם כל הצער שבדבר!!בלי להכפיש).ע"פ מיקרוסופט ניתן לכתוב את הפונקציה main עם ערך מוחזר void (למעשה ללא ערך מוחזר)alternatively the main and wmain functions can be declared as returning void(no return valueif you declare main or wmain as returning void,you cannot return an exitcode to the parent process or operating system using a return statementto return an exit code when main or wmain are declared as void you must use the exit functionsב)קל ופשוט יותר ללמוד שפת סי כאשר כותבים את הפונקציה עם ערך מוחזר ג) הסיבה העיקרית לשימוש בערך מוחזר מסוג int היא מטעמי ניידות של התוכניות.אם נהיה ראליים, רובנו,בעיקר הלומדים, לא כותבים תוכניות אשר ישמשו אותנו באין ספור מערכות הפעלה וסביבות עבודה.כאשר ביום מן הימים כשנעבוד כמהנדסי תוכנה בחברות ענק ונהיה תוכניתנים ונרצה להפיץ, נוכל לכתוב את ה-()main עם ערך מוחזר void.וואו זה היה הרבה לכתובגם אני באותה הדילמה כבר שנתיים ועוד מאז התיכון אבל.......יהיה בסדר אני אומרביי
פורסם 2008 בינואר 417 שנים הרגלים נכונים הם חשובים גם בשלב הלימודים, כי הרגלים גרועים נשארים אתך להרבה זמן.כל הכבוד ל-PhoenixBoy שטרח לברר (א) מה נכון ומה לא, ו-(ב) למה זה ככה.נמאס לי מ:* מתכנתים ששכו לבדוק אם malloc הצליח. לא אכפת לי אם בתוכניות הצעצוע שכתבת במכללה תמיד היה מספיק זכרון. על פלאפון יש מעט.* מתכנתים שזורקים exception על כל שטות. זה שלתוכנה שכתבת לוקח 5 שניות לעלות במקום 2 כי אתה עצלן, לא יעזור לנו למכור אותה.* מתכנתים שמשתמשים ב-Invoke בלי לחשוב אם עלול להיות deadlock. כן, אני יודע שלא אכפת לך להפעיל מחדש את התוכנה. ללקוחות שלנו אכפת.* מתכנתים שמשתמשים בצורה לא סטנדרטית ולא נכונה של פונקציות סטנדרטיות כי "זה עבד להם תמיד עד עכשיו". מצביע const זה לא קישוט מיותר בפונקציה. ערך חזרה לא נכון גורם לבאגים, שאח"כ יכולים לקחת ימים או שבועות למצוא.אם אתם רוצים להיות מתכנתים טובים, תסגלו לעצמכם הרגלים נכונים ממהתחלה.
פורסם 2008 בינואר 417 שנים מחבר הבנתי. את האמת שעד עכשיו רשמת עם int בכל מקרה אז אני אמשיך עם זה.. תודה רבה לכולם!
פורסם 2008 בינואר 517 שנים אז אחי, zelig סבבה שכנעת אותיאתה יכול לסכם לי פעם אחת ולתמיד מה צריך להיות???במטוטה ממך, אני פונה ללב שלך, באמת, איך אני אמור לעבוד בלי לפעול כמו רובוט אחרי מרצים??תודה
פורסם 2008 בינואר 517 שנים תשמע, לא יודע מה להגיד לך. המרצים שלי לא לימדו אותי שטויות (זה קרה, אבל לעיתים רחוקות מאוד).תשתמש בשכל שלך. תשאל. אם משהו נראה לך לא הגיוני, תשאל אותנו או את המרצים שלך (עדיף שניהם) כמו שעשית עכשיו.בטוח תפתח כל מני הרגלים רעים של תכנות, כמו כולנו, אבל תשמור על ראש פתוח ותמשיך להתעניין ואז תוכל ללמוד דברים חדשים ולתקן את ההרגלים שלך.אל תשכח שאתה עדיין צריך לקבל ציונים גבוהים. אם אתה לא מצליח לשכנע את המרצים שלך שהם טועים לגבי void main, אז אין לך ברירה ותצטרך בשיעורי בית להגיש את זה ככה. אבל לפחות אתה יודע מה נכון.לגבי C ו-C++ זה דווקא לא מאוד קשה. יש סטנדרט. יש טכניקות שהתפחתחו, והנחיות. יש דברים שהם עדיין דיעה, אבל בד"כ אנשים יאמרו לך מראש אם מה שהם עומרים עכשיו הוא יותר דיעה מאשר קונצנזוס. יש המון ספרים ואתרים (שחלקם טובים וחלקם לא...) שיעזרו לך להבין מה נכון, מה חוקי, ומה מוסרי בשפות. אם אדם ידוע בתחום כתב את המקור אז בד"כ אפשר להסתמך עליו.אתרים: http://www.gotw.ca/gotw/http://www.parashift.com/c++-faq-lite/http://www.research.att.com/~bs/bs_faq2.html וגם http://www.research.att.com/~bs/bs_faq.htmlספרים על C++, תוכנה, ואחרים:Effective C++ והאחרים שלו: More Effective C++ ו- Effective STLDesign and Evolution of the C++ Programming LanguageDesign PatternsPeoplewareCode CompleteThe Mythical Man Monthעריכה: דרך אגב, http://www.research.att.com/~bs/bs_faq2.html#void-main
פורסם 2008 בינואר 517 שנים רגע רגע לא הבנתימי הטיפש שאמר לך ב void main נכון?בשום פנים ואופן אל תסגל לך את ההרגל הזהזה הרגל חמוררר ביותרזה ילמד אותך בעתיד הרבה טעויות בשום אופן לא משתמשים בvoid למרות שזה פועל מבחינת הרצה[br]פורסם בתאריך: 5.01.2008 בשעה 18:33:07הרגלים נכונים הם חשובים גם בשלב הלימודים, כי הרגלים גרועים נשארים אתך להרבה זמן.כל הכבוד ל-PhoenixBoy שטרח לברר (א) מה נכון ומה לא, ו-(ב) למה זה ככה.נמאס לי מ:* מתכנתים ששכו לבדוק אם malloc הצליח. לא אכפת לי אם בתוכניות הצעצוע שכתבת במכללה תמיד היה מספיק זכרון. על פלאפון יש מעט.* מתכנתים שזורקים exception על כל שטות. זה שלתוכנה שכתבת לוקח 5 שניות לעלות במקום 2 כי אתה עצלן, לא יעזור לנו למכור אותה.* מתכנתים שמשתמשים ב-Invoke בלי לחשוב אם עלול להיות deadlock. כן, אני יודע שלא אכפת לך להפעיל מחדש את התוכנה. ללקוחות שלנו אכפת.* מתכנתים שמשתמשים בצורה לא סטנדרטית ולא נכונה של פונקציות סטנדרטיות כי "זה עבד להם תמיד עד עכשיו". מצביע const זה לא קישוט מיותר בפונקציה. ערך חזרה לא נכון גורם לבאגים, שאח"כ יכולים לקחת ימים או שבועות למצוא.אם אתם רוצים להיות מתכנתים טובים, תסגלו לעצמכם הרגלים נכונים ממהתחלה.אוי כמה שאתה צדיקהרבה זמן לא שמעתי אדם כמוךפשוטו כמשמעווסיגול הרגלים מהתחלה הזה הכי נכון שישתלמדו ממה שהובהר כאן
פורסם 2008 בינואר 517 שנים תנו לי להבין. לרשום כך : #include<stdio.h>void main ()שאר התוכנית.. זה לא נכון?! :-X ככה המורה שלי כותב
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.