עבור לתוכן

האם הקומפיילר של Arduino מאפשר להגדיר enum מסוג unsigned long?

Featured Replies

פורסם

שלום

אם אני מוסיף

": unsigned long"

אחרי שם ה-enum, זה לא מתקמפל..

מישהו הצליח לעשות את זה?

תודה

card

פורסם

למה לעשות דבר כזה?

פורסם
  • מחבר

חח :)

אני צריך enum שיכיל את הקודי IR של הכפתורים של שלט IR.

הקוד של כל כפתור הוא 4Bytes, כלומר long.

לכן ה-type הדיפולטי של enum, שהוא int, לא יתאים לי כאן.

בכל שפה שעבדתי בה עד עכשיו, אפשר לכתוב ":" אחרי הגדרת ה-enum, ואז להגדיר מאיזה type הוא,

אבל פה, זה לא מתקמפל לי :(

פורסם

חח :)

אני צריך enum שיכיל את הקודי IR של הכפתורים של שלט IR.

הקוד של כל כפתור הוא 4Bytes, כלומר long.

enum לא מיועד לדברים כאלה, אתה לא אמור בכלל לגעת בערכים שם (אפילו שלפעמים זה אפשרי). עבוד עם מערך.

http://en.wikipedia.org/wiki/Enumerated_type

פורסם
  • מחבר

עידו

צר לי להגיד לך, אבל מה שאתה אומר ממש לא נכון.

פורסם

עידו

צר לי להגיד לך, אבל מה שאתה אומר ממש לא נכון.

אשמח לראות דוגמאות.

[תוספת: ראיתי עכשיו שלפעמים, בשפת C, משתמשים במספור מפורש של אלמנטים ב-enum כדי להפוך משתנה מטיפוס כזה לסט "דגלים". זה יכול להיות נוח במצבים מסויימים, אבל עדיין לא מדובר כאן על שמירה של ערכים שרירותיים]

פורסם
  • מחבר

יש כמה מקרים בהם enum מתאים.

יש את המוכר - כשאתה צריך ליצור אוסף של מצבים,

אבל יש גם מצב ש-enum משמש כ-סט של קבועים.

אם אתה רואה שאתה צריך להגדיר כמה קבועים, והם כולם חלק מאותה "סדרה",

במקרה כזה מומלץ להשתמש ב-enum, כשאתה עושה הגדרה בעצמך לערך של כל איבר ב-enum.

במקרה של הכפתורים של השלט - זה בדיוק המקרה..

הערך ש-כל איבר ב-enum יקבל, הוא הקוד שלו.

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

או להחזיר את הקוד של כפתור,

אז במקום שהפונקציה סתם תקבל או תחזיר int/long,

היא תקבל/תחזיר את הסוג הזה של ה-enum שהגדרת..

פורסם

יש כמה מקרים בהם enum מתאים.

יש את המוכר - כשאתה צריך ליצור אוסף של מצבים,

אבל יש גם מצב ש-enum משמש כ-סט של קבועים.

אם אתה רואה שאתה צריך להגדיר כמה קבועים, והם כולם חלק מאותה "סדרה",

במקרה כזה מומלץ להשתמש ב-enum, כשאתה עושה הגדרה בעצמך לערך של כל איבר ב-enum.

במקרה של הכפתורים של השלט - זה בדיוק המקרה..

הערך ש-כל איבר ב-enum יקבל, הוא הקוד שלו.

זה hack על הרעיון של enum. הרי אם היית רוצה סט קבועים של מספרים עשרוניים, לא היית יכול לעשות את זה - כי הקומפיילר מלביש enum (לפחות בשפות שאני מכיר) על טיפוס int בסיסי. לא ש-hack זה רע בהכרח...

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

או להחזיר את הקוד של כפתור,

אז במקום שהפונקציה סתם תקבל או תחזיר int/long,

היא תקבל/תחזיר את הסוג הזה של ה-enum שהגדרת..

ופה אני חוזר לשאלה הראשונה שלי - בשביל מה, ואני אנסח אותה מחדש בעקבות מה שאמרת: האם זה באמת חשוב? כלומר, מה ההבדל העקרוני מבחינתך בין שתי השורות הבאות?

send(enumTVCode)
send(code[enumTV])

עד כמה שאני זוכר כרגע, אין ב-c/c++ שליטה על הטיפוס של enum, אבל זה בערבון מוגבל - אני אצטרך לבדוק.

פורסם
  • מחבר

אם היית רוצה סט קבועים של מספרים עשרוניים, לא היית יכול לעשות את זה - כי הקומפיילר מלביש enum (לפחות בשפות שאני מכיר) על טיפוס int בסיסי.

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

אם לא מגדירים שום type, אז ה-default נבחר, שזה int.

וזה מחזיר לשאלה המקורית שלי:

האם גם ב-++C של ארדואינו אני יכול איכשהו להגדיר את ה-type של ה-enum?

מקווה שמישהו יודע..

פורסם

ב++C זה נתמך רק בסטנדרט האחרון (C++0x/C++11), למרות שייתכן שחלק מסביבות הפיתוח תמכו בזה לא-רשמית גם לפני כן.

תחפש איך אפשר לתמוך בC++11 בארדואינו.

פורסם
  • מחבר

מגניב!

אבדוק.. נראה אם אפשר.

  • 2 שבועות מאוחר יותר...
פורסם

תנסה לכתוב כך

typedef enum {
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;

בגרסאות קודמות של cpp צריך לכתוב כך

ארכיון

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

דיונים חדשים