![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Hawaii |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
Какой размер у значений перечисляемого типа enum ? Или каждое значение имеет свой размер.
Есть такая строчка. enum employee_type {tmanager, tscientist, tlaborer}; Является ли каждое в отдельности значение tmanager, tscientist, tlaborer типом char* или каким-нибудь другим? Как эти значения записываются в файл в этом коде, неужели посимвольно?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Это зависит от настроек компилятора. По сути, enum эквивалентен unsigned.
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
этого достаточно |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
по умолчанию enum это unsigned int, а значения в фигурных скобках - просто константы, если явно не указывать то начинаются с нуля tmanager = 0, tscientist = 1, tlaborer = 2
|
|||
|
||||
| Hawaii |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.6.2007 Репутация: нет Всего: нет |
ouf.write( (char*)&etype, sizeof(unsigned int) ); Спасибо всем за разъяснение. С аргументом unsigned int тоже работает
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
На самом деле, я немного упростил свой ответ. Все намного сложнее. Например, на архитектуре x86_64 под Linux перечисления могут иметь размер sizeof(unsigned long) == 2*sizeof(unsigned). Поэтому правильная запись - так, как указал zkv. С другой стороны, если ты собираешься работать с платформонезависимым форматом файла и не хочешь переписывать процедуры под разные платформы и настройки компилятора, то надо пользоваться жестко заданными размерами (без использования sizeof). |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |