![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мне нужна функция такого плана: MySizeOf(A, True)=4 MySizeOf(A, False)=40000 То есть чтобы выдавала "рабочий" размер структуры в зависимости от выбора вариантного поля. Для работы с файлами пригодилась бы... Такая стандартная есть? Сообщение отредактировано: TarasBer - 13.10.2010 10:02 -------------------- |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата То есть чтобы выдавала "рабочий" размер структуры в зависимости от выбора вариантного поля. А здесь НЕТ вариантного поля. Есть просто список вариантов (в количестве 2 шт.). Чтоб появилось поле - его надо описывать...Цитата Такая стандартная есть? Нет. Стандартно размер вариантной записи вычисляется как сумма 1) размера фиксированной части; 2) размера поля-селектора (если оно именованное); 3) размера наибольшего из вариантов для каждого значения селектора. То есть, при использовании стандартной функции размер твоей записи ВСЕГДА будет равен sizeof(f), независимо ни от каких условий. Чтоб результаты были другими - придется писать свою функцию. |
TarasBer |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
А как-то выкрутиться можно?
-------------------- |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
"Можно и зайца научить курить" (С)
Смысл в чем? В том, чтобы при записи в файл писать нужное число байт? Ну, так у тебя ж поля в разных вариантах не с одним именем, а с разными, то есть, ты однозначно знаешь, какое поле пишется, вот и вызывай SizeOf для него, а не для структуры в целом. Для чего-то другого? Тогда расскажи для чего... |
TarasBer |
![]()
Сообщение
#5
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Для записи в файл.
Пишется вся структура (причём первое поле у неё - размер) блоком, при чтении же читается сначала размер, а потом столько байт, сколько нужно. Это для того, чтобы при будущем наращивании структуры париться по минимуму. Писать руками каждое поле и переписывать загрузку/сохранение при каждом изменении, с кучей ветвлений на случай совместимости со старыми версиями? Не надо, я пробовал, мне не понравилось. Вбивание размера в лоб, набором констант в зависимости от выбора варианта, проще, чем писать в файл поля по одному. -------------------- |
TarasBer |
![]()
Сообщение
#6
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
В общем выкрутился так:
Пришлось специальное "ненужное" поле добавлять. -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 3:59 |