Иллюстрированный самоучитель по практике программирования

Библиотека для распространения

Представленная спецификация все еще оставляет некоторые вопросы открытыми. Например, какие значения должны возвращать csvfield и csvnfield, если они вызваны после того, как csvgetline натолкнулась на EOF? Разрешить подобные головоломки непросто даже для маленькой программы, а для больших систем – исключительно трудно, но очень важно хотя бы попробовать с ними справиться. В противном случае вы рискуете обнаружить пробелы и недочеты уже в ходе реализации проекта.

Остаток параграфа посвящен новой реализации csvgetline, которая соответствует нашей спецификации. Библиотека разбита на два файла – заголовочный csv.h и файл воплощения csv.с. В заголовочном файле содержатся объявления функций, то есть представлена общедоступная часть интерфейса. В csv.с содержится собственно рабочий код библиотеки – реализации функций. Пользователи включают csv.h в свой исходный код и компонуют свой скомпилированный код со скомпилированной версией csv.с; таким образом, исходный код библиотеки никогда не должен быть видим.

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Библиотека для распространения

Внутренние переменные, в которых хранится текст, и внутренние функции вроде split объявлены статическими (static), так что они видны только внутри содержащего их файла. Это простейший способ сокрытия информации в программе на С.

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Библиотека для распространения

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Библиотека для распространения

Переменные инициализируются также статически. Эти начальные значения используются для проверки необходимости создания или наращивания массивов.

Эти объявления описывают простую структуру данных. Массив line содержит вводимую строку; массив sline создается путем копирования символов из line и вставки разделителя после каждого поля. Массив field указывает на значения в sline. На диаграмме показано состояние этих трех массивов после того, как была обработана строка ab, "cd", "e""f",, "g, h". Заштрихованные элементы в sline не являются частью какого-либо поля.

Иллюстрированный самоучитель по практике программирования › Интерфейсы › Библиотека для распространения

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.