Глава 9. Описатели и спецификаторы данных________________________209
24 if( !done)
25 (
26 DATE d;
27 // выполняется неявное преобразование
28 d.packed_date = ffbik. ff_.fdate;
29 // Форматируем дату функцией sprintf
30 char buf[11];
31 sprintf( buf, "%0.2d/%0.2d/%4d", d.unpacked_date.month,
32 d.unpacked date.day, d.unpacked_date.year + 1980);
33 cout « ffblk.ff_name « " was created on " « buf « endl;
34 ,}
35 }
Структура DOS_DATE в строках с 7 по 12 определяет поля даты, в общей сложности 16 бит. Данная часть программы продиктована стандартами Microsoft. Строки 14—18 накладывают беззнаковое целое на упакованную битовую структуру. Теперь любое присваивание значений одному из них неявно присвоит значение и другому (поскольку переменная unpacked date типа struct DOS_DATE и беззнаковое целое packed_date располагаются по одному и тому же адресу).
Строка 19 упрощает объявление объединения созданием для него псевдонима посредством typedef.
Строка 23 использует функцию DOS findfirst, которой передаются необходимые аргументы. Строки 26—32 выполняют неявное преобразование путем присваивания значений упакованного целочисленного массива из структуры ffbik беззнаковому целому элементу объединения packed_date.
Строка 31 для форматирования значений каждого элемента объединения unpacked_date использует функцию sprintf (объявленную в заголовочном файле stdio.h); в результате мы получаем дату в виде форматированной строки. Последняя строка программы печатает имя файла и дату.
Такого рода функциональность может пригодиться в самых разнообразных утилитах. Чтобы обеспечить возможность повторного использования неявного преобразования даты в будущем, вынесите структуру и объединение в заголовочный файл и, при желании, создайте функцию, принимающую упакованную дату или ffbik и возвращающую форматированную. строку даты. Вставьте объявление этой функции в заголовочный файл, поместите саму функцию в файл модуля и добавьте комментариев по вкусу.
const
f
Описатель const (declarator) часто остается недооцененным или неверно понятым, а то и применяется неподобающим образом. Использование const тогда, когда нужно, чтобы нечто на самом деле не менялось, играет большую роль в создании надежных программ. Если какая-то функция или объект постоянны, то это является важным аспектом данной программы.