למה זה לא נכון לרשום void main()? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

למה זה לא נכון לרשום void main()?


PhoenixBoy

Recommended Posts

שלום,

חיפשתי בפורום אך לא מצאתי תשובה מדוע ב-C ו-CPP ה-main חייב להחזיר int וזה לא נכון לכתוב שהוא לא יחזיר כלום (void)?

לפי מה שהבנתי זה קשור איכשהו לזה שאם אין שגיאות הוא מחזיר 0.

תודה מראש!

קישור לתוכן
שתף באתרים אחרים

ככה הוגדר ב ANSI C

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

http://users.aber.ac.uk/auj/voidmain.shtml

קישור לתוכן
שתף באתרים אחרים

לא שזה לא נכון

זה לא מקובל מסיבות מסויימות

אם יש לך נכונות להבין למה ואתה באמת רוצה להעשיר את הידע שלך

ואין לך בעיה באנגלית

מאווד מומלץ לקרוא את זה:

http://www.eskimo.com/~scs/readings/voidmain.960823.html

קישור לתוכן
שתף באתרים אחרים

לא שזה לא נכון

זה לא מקובל מסיבות מסויימות

זה לא נכון. התקן מגדיר היטב את הנושא. זה כאילו שאמרת ש-


int x = 3;
f (x++, x);

זה כמו f(3,4). לפעמים זה פועל, אבל אפילו אם זה פועל זה עדיין לא נכון.

קישור לתוכן
שתף באתרים אחרים

זה לא "לא מקובל", זה לא נכון. התקן קובע אחרת.

ועובדה שזה לא תמיד פועל (קרא את הלינק ש-MasterDK נתן).

זה שהיום זה פועל, לא אומר שמחר זה גם יפעל.

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

למה? כי לפני שלוש שנים כל האתרים נכתבו לפי אקספלורר ולא לפי התקן, כי מי כבר משתמש בדפדפנים שאינם אקספלורר? ואז נוצר מצב ש-30% מהגולשים לא מסוגלים להיכנס לאתרים האלה.

קישור לתוכן
שתף באתרים אחרים

שוב

לא אמרתי שאתה טועה

אמרתי שההגדרה שלי ושלך מתאימה לצמד המילים "לא מקובל"

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

אך מבחינה ביצועים לא משתמשים בהם ולא אמורים להשתמש בהם

כי היעוד של פונקציית הMAIN הוא עם ערך מוחזר ולא עם וויד

ואני חוזר על עצמי

לא אמרתי שאתה טועה

ההפך

אני איתך ואתה צודק באלף אחוז

קישור לתוכן
שתף באתרים אחרים

int main טוב בגלל:

א) על פי הסטנדרט יש להחזיר int

ב) ייתכן שפונקציית התיחול והעלייה- ה-startup , עשויה להניח שהערך המוחזר של הפונקציה ()main ,יידחף למחסנית.

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

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

מדוע אפשר להשתמש בערך מוחזר void:

א) הרוב ביננו משתמשים במערכות ההפעלה של (עם כל הצער שבדבר!!בלי להכפיש).

ע"פ ניתן לכתוב את הפונקציה main עם ערך מוחזר void (למעשה ללא ערך מוחזר)

alternatively the main and wmain functions can be declared as returning void(no return value

if you declare main or wmain as returning void,you cannot return an exitcode to the parent process or operating system using a return statement

to return an exit code when main or wmain are declared as void you must use the exit functions

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

ג) הסיבה העיקרית לשימוש בערך מוחזר מסוג int היא מטעמי ניידות של התוכניות.

אם נהיה ראליים, רובנו,בעיקר הלומדים, לא כותבים תוכניות אשר ישמשו אותנו באין ספור מערכות הפעלה וסביבות עבודה.

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

וואו זה היה הרבה לכתוב

גם אני באותה הדילמה כבר שנתיים ועוד מאז התיכון אבל.......יהיה בסדר אני אומר

ביי

קישור לתוכן
שתף באתרים אחרים

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

כל הכבוד ל-PhoenixBoy שטרח לברר (א) מה נכון ומה לא, ו-(ב) למה זה ככה.

נמאס לי מ:

* מתכנתים ששכו לבדוק אם malloc הצליח. לא אכפת לי אם בתוכניות הצעצוע שכתבת במכללה תמיד היה מספיק . על פלאפון יש מעט.

* מתכנתים שזורקים exception על כל שטות. זה שלתוכנה שכתבת לוקח 5 שניות לעלות במקום 2 כי אתה עצלן, לא יעזור לנו למכור אותה.

* מתכנתים שמשתמשים ב-Invoke בלי לחשוב אם עלול להיות deadlock. כן, אני יודע שלא אכפת לך להפעיל מחדש את התוכנה. ללקוחות שלנו אכפת.

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

אם אתם רוצים להיות מתכנתים טובים, תסגלו לעצמכם הרגלים נכונים ממהתחלה.

קישור לתוכן
שתף באתרים אחרים

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

תשתמש בשכל שלך. תשאל. אם משהו נראה לך לא הגיוני, תשאל אותנו או את המרצים שלך (עדיף שניהם) כמו שעשית עכשיו.

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

אל תשכח שאתה עדיין צריך לקבל ציונים גבוהים. אם אתה לא מצליח לשכנע את המרצים שלך שהם טועים לגבי 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 STL

Design and Evolution of the C++ Programming Language

Design Patterns

Peopleware

Code Complete

The Mythical Man Month

עריכה: דרך אגב, http://www.research.att.com/~bs/bs_faq2.html#void-main

קישור לתוכן
שתף באתרים אחרים

רגע רגע לא הבנתי

מי הטיפש שאמר לך ב void main נכון?

בשום פנים ואופן אל תסגל לך את ההרגל הזה

זה הרגל חמוררר ביותר

זה ילמד אותך בעתיד הרבה טעויות

בשום אופן לא משתמשים בvoid למרות שזה פועל מבחינת הרצה[br]פורסם בתאריך: 5.01.2008 בשעה 18:33:07


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

כל הכבוד ל-PhoenixBoy שטרח לברר (א) מה נכון ומה לא, ו-(ב) למה זה ככה.

נמאס לי מ:

* מתכנתים ששכו לבדוק אם malloc הצליח. לא אכפת לי אם בתוכניות הצעצוע שכתבת במכללה תמיד היה מספיק . על פלאפון יש מעט.

* מתכנתים שזורקים exception על כל שטות. זה שלתוכנה שכתבת לוקח 5 שניות לעלות במקום 2 כי אתה עצלן, לא יעזור לנו למכור אותה.

* מתכנתים שמשתמשים ב-Invoke בלי לחשוב אם עלול להיות deadlock. כן, אני יודע שלא אכפת לך להפעיל מחדש את התוכנה. ללקוחות שלנו אכפת.

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

אם אתם רוצים להיות מתכנתים טובים, תסגלו לעצמכם הרגלים נכונים ממהתחלה.

אוי כמה שאתה צדיק

הרבה זמן לא שמעתי אדם כמוך

פשוטו כמשמעוו

סיגול הרגלים מהתחלה הזה הכי נכון שיש

תלמדו ממה שהובהר כאן

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...