| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > enum |
| Автор: Hawaii 26.8.2007, 22:13 | ||
| Какой размер у значений перечисляемого типа enum ? Или каждое значение имеет свой размер. Есть такая строчка. enum employee_type {tmanager, tscientist, tlaborer}; Является ли каждое в отдельности значение tmanager, tscientist, tlaborer типом char* или каким-нибудь другим? Как эти значения записываются в файл в этом коде, неужели посимвольно?
|
| Автор: bsa 26.8.2007, 22:15 |
| Это зависит от настроек компилятора. По сути, enum эквивалентен unsigned. |
| Автор: zkv 26.8.2007, 22:21 | ||
этого достаточно |
| Автор: Lazin 26.8.2007, 23:10 |
| по умолчанию enum это unsigned int, а значения в фигурных скобках - просто константы, если явно не указывать то начинаются с нуля tmanager = 0, tscientist = 1, tlaborer = 2 |
| Автор: Hawaii 26.8.2007, 23:31 |
| ouf.write( (char*)&etype, sizeof(unsigned int) ); Спасибо всем за разъяснение. С аргументом unsigned int тоже работает |
| Автор: zkv 27.8.2007, 00:36 | ||
все таки лучше было:
так как: а второй вариант не будет от них зависеть |
| Автор: bsa 27.8.2007, 10:10 | ||
На самом деле, я немного упростил свой ответ. Все намного сложнее. Например, на архитектуре x86_64 под Linux перечисления могут иметь размер sizeof(unsigned long) == 2*sizeof(unsigned). Поэтому правильная запись - так, как указал zkv. С другой стороны, если ты собираешься работать с платформонезависимым форматом файла и не хочешь переписывать процедуры под разные платформы и настройки компилятора, то надо пользоваться жестко заданными размерами (без использования sizeof). |