טיפול בשגיאות, exceptionים ועוד. מה מתי ואיך? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

טיפול בשגיאות, exceptionים ועוד. מה מתי ואיך?


MasterDK

Recommended Posts

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

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

סוגי השגיאות:

1. שגיאות לא קריטיות - כלומר שגיאות שלא דורשות סגירה של התוכנית אלה רק דיווח על השגיאה בקובץ. שגיאות כגון: חודש שלא הוכנס נכון (נגיד חודש מספר 13) וכדומה.

טיפול - כמו שכבר ציינתי לרשום את זה לקובץ TXT של שגיאות או להציג הודעה על המסך. מספיק להישתמש ב IF פשוט.

2. שגיאות קריטיות - כלומר שגיאות שהתוכנית אמורה לקרוס. שגיאות כגון קובץ חסר (תמונה נניח), מצד שני זה לא כזה קריטי אפשר פשוט לא להציג את אותה תמונה, מצד שני אם חסר קובץ DLL לדוגמא אז התוכנית לא יכולה לרוץ.

טיפול - אין לי מושג.

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

ובכלל מה הדרך הנכונה לטפל בשגיות בזמן ריצה?

exception:

גם כן כמה שאלות:

1. מתי משתמשים ב exception? מתי מותר לזרוק "חריגה"?

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

מקווה שהבנתם את הכוונות שלי ותוכלו לעזור לי.

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

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

אם אפשר, עדיף להקריס את התכנית בצורה מסודרת - לא באמצעות exit, אלא פשוט באמצעות יציאה מסודרת מה-main loop של התכנית. זה יאפשר לך לסגור כל מיני קצוות, כמו הודעה מסודרת למשתמש, שמירת מידע לדיסק וכו'. אופן הביצוע כמובן תלוי מאוד באופי של התכנית שלך - אם זו תכנית console או , אם אתה משתמש ב-thread אחד או multithreaded וכד'.

לגבי השאלות הנוספות:

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

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

דרך אגב, אם אין לך סיבה משמעותית לעבוד ב-C++ (כגון הצורך בתכנות יעיל או גישה לליבה של מערכת ההפעלה), הייתי ממליץ לך לעבור לשפה יותר מתקדמת (Java או C#). הטיפול שם בחריגות הרבה יותר פשוט (ג'אווה גם מאוד קפדנית בנושא), ובכלל קל יותר לתכנת בהן.

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

קודם כל תודה רב העל התשובה המהירה והמפורטת עזרת לי מאוד :)

דבר שני אם כבר קיבלתי תשובה ניתן לעשות קצת offtopic.

לגבי C++, אני עובד איתה כי הבית ספר שלי דורש שפרוייקט סיום בי"ב יעשה בשפה C ואפשרות לC++.

לגבי Java תמיד רציתי ללמוד אותה אבל יש כמה שאלות:

1. כמתכנת כיום אני ארצה לתכנת גם בעתיד ואני רוצה לתכנת בתחום גרפיקה ובעיקר משחקי מחשב, סימולציות תלת מימדיות וכדומה, האם Java מתיאמה לזה?

2. עד כמה קשה ללמוד Java לאחד שמכיר syntax של C כ 4 שנים ו C++ כשנתיים?

3. מאיפה ניתן להתחיל ללמוד Java לבד? איזה אתרים?

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

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

1. קצת פחות. היתרון של C/C++ הוא ביעיליות, ולכן הן יותר מתאימות לתוכנות הדורשות חישובים מורכבים (כגון משחקי מחשב ו\או גרפיקה). כמובן, יש משחקי מחשב כתובים בשפות managed, היות שהיתרון של זמן הפיתוח קצר גדול על פני היעילות.

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

3. יש tutorials באתר של sun, ואם תעשה חיפוש בפורום אני בטוח שתמצא ששאלו את השאלה הזו כמה פעמים.

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

יש חיבור בין opengl לJAVA שנקרא GL4Java:

http://jerome.jouvie.free.fr/index.php

ולC#:

http://www.taoframework.com/

זה לא באמת חשוב באיזה שפה אתה כותב, הפקודות של opengl הן אותו דבר.

עריכה: אני ממש סובל מזה שלא התחלתי את הפרוייקט opengl שלי בC#, לעבוד בימינו עם C זה סיוט :-\

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

ארכיון

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

×
  • צור חדש...