קוד: |
~$ echo "void main(){}" > moo.c ~$ gcc moo.c -o moo moo.c: In function `main': moo.c:1: warning: return type of `main' is not `int' ~$ ./moo ~$ |
קוד: |
main() |
ציטוט: |
ב 2003-09-20 14:07, ik_5 כתב: שלום, אני מנסה לקמפל עם קוד שנכתב בבורלנד C++ 4.5 בלינוקס, עכשיו היות והקוד נועד לשיעורים באוניברסיטה יש כמה חוקים "נוקשים" שחייבים להיות כאשר אני כותב קוד כזה. הבעייה מתחילה כאשר gcc מודיע לי הוא לא מוכן לקבל דברים כגון: void main היות והוא אומר ש main חייב להחזיר ערך, בעוד שבאוניברסיטה מחייבים אותנו לא להחזיר ערך ולהשתמש ב void. האם יש איזושהי הגדרה שאני צריך להגיד לקומפיילר לפני הנסיון לקמפל שכן יתן לי לבצע את הקוד הזה ? |
ציטוט: | ||
ב 2003-09-20 15:46, Anonymous כתב: מוזר, אני לומד עכשיו ספר על ANSI C, וכל תוכנית שם מתחילה כך-
שזה זהה כמובן ל-void main ... |
קוד: |
main() |
קוד: |
int main() |
ציטוט: | ||
ב 2003-09-20 15:46, Anonymous כתב: מוזר, אני לומד עכשיו ספר על ANSI C, וכל תוכנית שם מתחילה כך-
שזה זהה כמובן ל-void main גם לא קיבלתי שום אזהרה מ-gcc |
קוד: |
gcc -ansi -pedantic |
קוד: |
main()
{ } |
ציטוט: | ||
ב 2003-09-20 19:48, wliad כתב: מספר הבהרות בנוגע ל-ANSI C: Implicit type defenition:
החזרת 0 בסיום main: הפונקציה הראשית של התוכנית main חייבת להחזיר ערך על-פי התקן של ANSI-C. הנורמה היא שכאשר התוכנית מסתיימת ללא תקלות מוחזר הערך 0. החזרת כל מספר אחר מציינת שקרתה שגיאה כלשהי. פונקציות void main האפשרות לכתוב פונקציה ראשית שלא מחזירה ערך היא הרחבה של שפת C שהוכנסה במקור על-ידי חברת בורלנד במהדר TC שלה, ואחר-כך אומצה גם על-ידי חברות אחרות כגון מייקרוסופט. למעשה, מדובר בעבודה בעיניים, מאחר ופונקציות כאלו מתורגמות אוטומטית לפונקציות אשר מחזירות תמיד את הערך 0. בקומפיילר gcc נזרקת אזהרה בעת נסיון להדר קוד המכיל פונקציה ראשית אשר אינה מחזירה ערך, מאחר והקוד אינו תקני. אין זה "טבעי" שתוכנית תסתיים תמיד ללא שגיאה, ולכן באה אזהרה זו. |
ציטוט: |
ב 2003-09-21 10:30, ik_5 כתב: בקיצור אני הולך להגיש את הממ"ן עם int ונקווה שלא ירדו לי מזה נקודות... מקסימום נראה כבר מה יהיה... |
ציטוט: |
חבל אגב שאין קומפילרים טובים וספריות עזר לפתוח של פסקל בעולם הOPEN SOURCE כמו שיש בעולם המסחרי...אבל מי יודע , אולי זה ישתנה. |
ik_5 : |
זאת הסיבה (יותר נכון אחת מהן) למה אני שונה את שפות C ו C++ השפה שאני הכי אוהב לתכנת בה היא פסקל ויותר נכון פסקל מונחה עצמם (AKA דלפי). אבל זה כבר סיפור אחר... לפחות שם התקן יותר מחמיר מהרבה דברים שקיימים בשפות הC למינהם (כולל C++ ואף ג'אווה)
יש הרבה חורים בתקנים (הרבה פעמים) שנותנים לכל קומפיילר לפעמים יכולת פרשנות משל עצמו... הרצתי פעם (בC) קוד שהיה צריך לחשב בקלט שלו משהו לפני הוספת הערך החדש למשתנה, (אני פשוט לא זוכר את התחביר שעשיתי), עכשיו התחביר חוקי למהדרין היה (אפילו לא הינט כלשהו) אבל קומפיילר בורלנד למשל עבד כמו שרציתי, GCC קודם הכניס ערך ורק אז הוסיף לו את הערך החדש שרציתי לחשב (דבר שהיה צריך להתבצע לפני), קומפיילרים שונים אחרים, כל אחד החליט בשביל עצמו עם הוא עושה כמו הדבר שאני רציתי לבצע או כמו ההפך ממה שרציתי לבצע, ובגלל זה ד"א השגתי את הספר של ריצ'י שגיליתי בו חוסר בהירות בנושא הזה. אחת הסיבות שאני כל כך שונא להשתמש למשל במוצרי מיקרוסופט זה החוסר אחידות מול שאר העולם ושאר המערכות. ואני חושב בדיוק שונה משכן טוב שלי (שהוא מהנדס תוכנה) שאומר שחייבים להשתמש במיקרוסופט כי הם הכי גדולים ומדברים רק עם עצמם, בעוד שהטענה שלי היא שבגלל שהם מדברים רק עם עצמם, לא צריך בכלל להשתמש בהם כי כל השאר יודעים להתסדר טוב מאוד עם כולם (לך תשכנע משוכנעים) בקיצור אני הולך להגיש את הממ"ן עם int ונקווה שלא ירדו לי מזה נקודות... מקסימום נראה כבר מה יהיה... אני רוצה להגיד תודה רבה לכל התגובות והעזרה שנתתם לי פה <font size=-1>[ נערך על-ידי ik_5 בתאריך 21/09/03 10:31:26 ]</font> |