עבור לתוכן

מה בעצם התפקיד של VOID בשפת C?

Featured Replies

פורסם

לפי תרגום אזי void = null או משהו בסגנון.

מה התפקיד של זה בשפת C עצמה?

פורסם

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

זאת אומרת שאין צורך לכתוב פקודת Return, וגם אתה לא יכול לכתוב אותה גם אם תרצה.

Void משמש לדוגמה לפונקציות שמשנות מערך או מדפיסות משהו.

פורסם

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

אפשר גם להגדיר מצביע שהוא void. זה מצביע בלי טיפוס מסויים ככה שאתה לא יכול לקדם אותו או לעשות לו dereference (כל דבר שמצריך מידע על הטיפוס). מה שאתה יכול לעשות זה להמיר אותו למצביע מהטיפוס שאתה רוצה. malloc למשל מחזירה מצביע ל void.

פורסם
  • מחבר

למה כותבים void main () או אפשר פשוט main () ?

זה באמת משנה? עכשיו אם אני לא אכתוב void המורה בטח יוריד לי ניקוד או לא יבין מאיפה באתי עליו [באמת שהוא לא יודע טוב את החומר, ולכן קניתי ספר].

פורסם

למה כותבים void main () או אפשר פשוט main () ?

זה באמת משנה? עכשיו אם אני לא אכתוב void המורה בטח יוריד לי ניקוד או לא יבין מאיפה באתי עליו [באמת שהוא לא יודע טוב את החומר, ולכן קניתי ספר].

לכל פונקציה חייב להיות סוג.

ו-main בכלל אמורה להחזיר int...

פורסם
  • מחבר

בספר למשל כותבים ללא void אלא ישר main() .

ולכן אני מעלה את השאלה, האם הvoid במקרה של void main מיותר?

פורסם

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

ומה זו הקמצנות הזאת על 4 אותיות מסכנות?

ככה כותבים ב-C, אם אתה לא אוהב את זה, אתה תמיד יכול לתכנת בשפות אחרות שבהן זה אחרת (:

בכל מקרה, התקן של C אומר ש-main צריך להחזיר int, הוא אמור להחזיר 0 במקרה שהתוכנית הסתיימה בהצלחה וללא שגיאות, וכל ערך אחר במידה והייתה תקלה.

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

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

פורסם
  • מחבר

אני רק עכשיו בפרק של הפונקציות, דרך אגב, זהו הספר שרכשתי.

אני לא ממהר עם הקריאה כי -

א. אני מתקדם הרבה יותר מהכיתה, גם ביגע וגם בהבנה.

ב. אני משחק HL2EP2, Virtua Tennis 3, Test Drive Unlimited וכדומה :smile1:

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

זה לא שהתלמידים לא יכולים להתרים גם בזמן שביתה :screwy:

ותודה רבה לכולם :xyxthumbs:

---

ד"א, שאלה חשובה.

בתחילת השנה הציעו לנו ללמוד רובוטיקה, המחנכת אמרה שזה ללא יחידות אבל זה ידע [מי אני שאתנגד לידע? כמובן שנרשמתי].

לאחר מכן המורים שמלמדים את זה אמרו זה 5 יח"ל רובוטיקה, מה שאני לא מבין, כיצד ניתן לעשות 5 יח"ל תוך שנה אחת [אני יב']?!

זה הרי לא הגיוני :screwy:

שאלה #2 - מה בדיוק עושים ב'רובוטיקה'? משתמשים באסמבלי [או איזו שפה?] בשביל לתכנת רובוט למטרה מסויימת?

או ממש בונים את הרובוט ובנוסוף מתכנתים אותו?

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

שום דבר לא זז, וכשזה זה זז זה מאוחר מדי או זה כבר לא 'טוב מספיק'.

הבחינה ב9.12 [פסיכומטרי] ועוד לא התחלנו כלום :'( :'(

---

ולאחר הפריקה הזו, אשמח אם מישהו יענה לי :xyxthumbs:

פורסם

בספר למשל כותבים ללא void אלא ישר main() .

ולכן אני מעלה את השאלה, האם הvoid במקרה של void main מיותר?

קומפיילרים ישנים של C היו מאפשרים להגדיר משתנה או פונקציה ללא טיפוס, כאשר הכוונה היא לטיפוס ברירת המחדל (int). כלומר, ההגדרה הזו:

f(int x, int y) {
// some code
}

הייתה תקפה, והייתה יוצרת פונקציה שמחזירה int. מכאן, שההגדרה הבאה:

main() {
// ...
}

הייתה תקנית.

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

void main() {
// ...
}

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

פורסם

מבחינת תאוריה של תורת הטיפוסים, void של C הוא טיפוס שיש לו רק ערך אחד. פונקציה שמחזירה void למעשה מחזירה את הערך הבודד הזה.

זה עוזר אם חושבים על void בתור משהו כמו


typedef struct { } void; /* <-- this is not the real definition, not legal C, do not use, just for illustration purposes! */

פורסם
  • מחבר

אוקיי, תודה רבה לשניכם :xyxthumbs:

תוכלו בבקשה להתייחס לשאלות הבאות?

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

ד"א, שאלה חשובה.

בתחילת השנה הציעו לנו ללמוד רובוטיקה, המחנכת אמרה שזה ללא יחידות אבל זה ידע [מי אני שאתנגד לידע? כמובן שנרשמתי].

לאחר מכן המורים שמלמדים את זה אמרו זה 5 יח"ל רובוטיקה, מה שאני לא מבין, כיצד ניתן לעשות 5 יח"ל תוך שנה אחת [אני יב']?!

זה הרי לא הגיוני :screwy:

שאלה #2 - מה בדיוק עושים ב'רובוטיקה'? משתמשים באסמבלי [או איזו שפה?] בשביל לתכנת רובוט למטרה מסויימת?

או ממש בונים את הרובוט ובנוסוף מתכנתים אותו?

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

שום דבר לא זז, וכשזה זה זז זה מאוחר מדי או זה כבר לא 'טוב מספיק'.

הבחינה ב9.12 [פסיכומטרי] ועוד לא התחלנו כלום :'( :'(

---

ולאחר הפריקה הזו, אשמח אם מישהו יענה לי :xyxthumbs:

שוב תודה רבה לכולם ;)

פורסם

אין לי מושג. את ימי הבי"ס שלי גמרתי מזמן...

מצד שני דיברתי עם מישהי שלמדה רובוטיקה באיזה בי"ס באזור המרכז.

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

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

פורסם

בגדול במגמה הזו אתם מתחלקים לקבוצות - יש קבוצה שאחראית על בניית הרובוט, וש קבוצה שאחראית על התכנות שלו וכו'.

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

פורסם

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

פורסם

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

ארכיון

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

דיונים חדשים