שאלה שאלתית ביותר ב-c

MaorCS

New member
שאלה שאלתית ביותר ב-c

למה הפונקציה main צריכה להיות מסוג int מה ההיגיון פה?? כל מורה בכל בית ספר או מכללה, כשמתחיל ללמד את השפה וכותב מבנה בסיסי של תוכנית כותב:
#include...... void main() { }​
ואם כבר הפונקציה החזירה int, מה קורה עם אותו ערך?? לאן הוא הולך?
 

IP yuval

New member
ענו על זה כבר מספיק פעמים.

בקצרה: א. המורים עובדים עליך. הם לא מלמדים אותך C. כנראה שהמורים למדו "C" מהספרC Programing for the Compleat Idiot ב. הערך מגיע לתכנית שהפעילה את התכנית.
 

vinney

Well-known member
למה אתה מדבר שטויות?

בC אין שום הכרח שMAIN תחזיר ערך, היא בהחלט יכולה להיות VOID, וזה חוקי לחלוטין המטרה של INT כערך מוחזר בMAIN זה להעביר תוצאת הריצה לתהליך הקורא, לא תמיד משתמשים בזה באמת. ב++C חייבים שMAIN תחזיר INT, ות'אמת, אני לא ממש מבין למה עשו את זה. אני חושב שמתכנת שיודע שהוא צריך להחזיר ערך, יחזיר, וזה שלא יודע - כנראה שVOID מספיק טוב בשבילו.... אבל נו שוין, מה אני מבין.
 

vinney

Well-known member
אצלי בVC6 שניהם מתקמפלים בלי

אבל VC ידוע כלא תקני ספר של קרניגן ריצ'י אומר בפירוש שMAIN יכולה להחזיר VOID, אילו ספר של סטוסטרופ (למיטב זכרוני, אין מולי כרגע) אומר בפירוש שלא.
 

IP yuval

New member
?

"ספר של קרניגן ריצ'י אומר בפירוש שMAIN יכולה להחזיר VOID" באיזה עמוד? בכל מקרה, ANSI C קובע אחרת.
 

vinney

Well-known member
בכמה מקומות

עמוד 26 אומר שMAIN היא פונקציה ככל האחרות (מזה נובע שיכולה להיות VOID) זה ממשיך לפרק 4 שם גם מוזכר שפונקציה יכולה להחזיר VOID ושMAIN היא ככל הפונקציות בנוסף - עמ' 225, הגדרות פונקציות אחרון חביב הוא הדקדוק בעמ' 234 תוכל להפנות אותי לANSI, איפה הוא מתייחס לMAIN במיוחד?
 

IP yuval

New member
לפי מה שאני יודע אי אפשר להשיג

אותו באינטרנט (אני אשמח לדעת שאני טועה)... אין לי אותו. קנה אותו ותחפש שם
. http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+9899%2D1999
 

annefan

New member
כמו כל פונקציה

הרי מישהו קורא לפונקציה הזו. המישהו הזה מצפה לקבל ממנה ערך בחזרה.
 

MaorCS

New member
טוב לפי מה שהבנתי

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

annefan

New member
לא הבנת נכון

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

vinney

Well-known member
חוק התכנות הנכון

פונקציה צריכה להחזיר ערך, זה א"ב. לא תמיד בודקים אותו, אבל רוב מוחלט של פונקציות הסטנדרטיות (אם לא כולן) מחזירות ערך. MAIN, שזה התוכנית שלך, צריכה להחזיר ערך. אתה אולי לא מודע לזה, אבל הערך הזה נבדק ע"י הRUNTIME ועובר הלאה למערכת ההפעלה. זה יכול להיות מאוד שימושי בSHELL SCRIPTING לדעת שתוכנית מחזירה ערכים, בדיוק כמו בתכנות רגיל זה שימושי לדעת שפונקציה מחזירה ערכים.
 

the new L

New member
בכל מערכת הפעלה בערך

למשל ביוניקס על גרסאותיה, בלינוקס על גרסאותיה, בDOS על גרסאותיה ובWINDOWS על שלל גרסאותיה, כשתוכנית רוצה להסתיים היא מחזירה ערך כלשהו (שבדרך כלל מעיד האם היא הצליחה או לא). מכיוון שהחזרת הערך נדרשת על ידי מערכת ההפעלה, הגיוני עד מאוד שיהיו חייבים להחזיר ערך. ודרך אגב, הסטנדרט האחרון של C++ קובע במפורש, שאמנם main חייבת להיות מוגדרת כמחזירה int, אבל אין הכרח לכתוב בה משפט return מפורש, אלא אפשר פשוט להשמיט אותו, ואז בצורה אוטומטית יוחזר 0.
 

MaorCS

New member
או קיי

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

IP yuval

New member
ברור שאתה יכול לבדוק אותו.

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