Logo

רד-בורד: ארכיון

ראשי > תיכנות > goto C

21/08/2006 04:28:51 Rx3vL0n
אני רוצה לבדוק אם הבנתי רק נכון את המטרה של הפקודות האלו
קוד:#include <stdio.h>

void main()
{
int var = 0;

a: if (var == 0)
goto a0;
else
goto a1;
a1: printf("Var != 0\n\r");
a0: printf("Var = 0\n\r");
}

השאלה שלי היא בעצם התוכנית ישר תיגש לשורה
קוד:printf("Var != 0\n\r");
אם כן אז הבנתי את המטרה של הפקודות האלו.
והשאלה השנייה שלי בקשר לאותו קוד ..
מה זה a0 ?
יענו מה השימוש שלו פה
21/08/2006 07:50:06 Eran
כבר כמה שנים טובות לא נגעתי בסי אבל עד כמה שאני זוכר a1 וa0 משמשים עוגנים שניתן לשלוח אליהם באמצעות goto. נראה לי ששורת הקוד a1 וa0 יבוצעו בכל מקרה אם הקוד מגיע אליהן - כך ששימוש בgoto a1 שורה מעל a1 הוא בעצם חסר טעם. אם זה ככה אז גם a0 יבוצע מיד אחרי a1.
21/08/2006 14:42:58 T4uSBaZ
אני יצטט לך מתוך הספר "ללמוד C" - יואב נתיב:

הפקודה goto הגדרת label
שפת C מאפשרת לקפוץ או לדלג למקום אחר בתוכנית, אל תווית (label) שקבענו בה מראש. ככלל, הפקודה goto כלל אינה הכרחית ובאופן מעשי בדרך כלל קל מאוד לכתוב תוכניות מבלי להשתמש בפרודה זו. כללי התכנות המובנה המקובלים מאוד היום, אפילו אוסרים (!) את השימוש בפקודה זו.

/* הערה ממני.. נעבור ישר לקוד.. אבל באמת שכדאי לך להשתמש יותר בתנאים מאשר החרא הזה, גם זה לא מקובל ואף אסור, וזה ממש לא יעיל וזה סתם יהרוס לך אחר כך. גם אני התחלתי כך ישר אחרי שלמדתי BATCH, עצה ממני תעבור לתנאים [כפי שאחרים גם יגידו לך פה] */

תבנית המקרה:
כדי ליצור label בתוכנית, זאת אמרת עוגן לקפוץ אליו:
קוד:
label:

ז"א השם ונקודותיים.
כדי לקפוץ ממקום לתוכנית לlabel
קוד:
goto label;

תוכנית לדוגמא:
קוד:
#include <stdio.h>
#include <conio.h>
void main()
{
goto exit;
printf("You wont see me");
exit:
printf("bye bye!");
getch();
}
21/08/2006 17:06:23 Rx3vL0n
חחח תודה אחי על השקעה את הקוד הזה לא כתבתי פשוט היה את הקוד הזה ורציתי לדעת מה בעצם עושה הפקודות האלו...
21/08/2006 19:57:42 T4uSBaZ
אהה... טוב
ד.א. הקוד ממש לא טובב
ויש בו המון שגיאותת (לא קימפול, אלה ככה)
לדוגמא: אם var לא שווה 0, הפלט יהיה:
קוד:
printf("Var != 0\n\r");
printf("Var = 0\n\r");

תנתח את זה קצת ותבין..
עמודים: 1