О стандартных библиотеках




С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C.

В языке Си стандартная библиотека более сильно интегрирована с языком по сравнению с другими языками программирования высокого уровня. Без использования функций стандартной библиотеки не может быть написана ни одна серьезная программа на языке Си, в частности потому, что в самом языке нет никаких средств ввода/вывода информации.

Стандартную библиотеку функций языка Си можно разделить на две категории: функции, которые имеются в библиотеке любой системы программирования языка Си для различных операционных систем и различных архитектур компьютеров, и функции, которые являются уникальными в рамках какой-либо системы программирования или обеспечивают доступ к специфическим возможностям конкретной операционной системы, или связаны с конкретной архитектурой компьютера.

Функции первой категории образуют переносимое ядро библиотеки; программы, в которых используются только такие библиотечные функции, могут быть перенесены в другую систему программирования, другую операционную систему или на другой тип архитектуры компьютера с наименьшими затратами. Плата за универсальность — невозможность воспользоваться специфическими средствами, предоставляемыми конкретной вычислительной средой.

Функции второй категории предоставляют возможность получить доступ к функциям ядра данной операционной системы к внутренним структурам данной операционной системы, к регистрам используемых аппаратных устройств. Кроме того, ко второй категории относятся функции, которые добавлены в библиотеку, исходя из личных предпочтений разработчиков конкретной системы программирования — как им видится удобный набор средств для разработки различных алгоритмов — сравните, например, функции memset и setmem.

Со времени принятия стандарта языка Си, что окончательно произошло в 1989 году, в системах программирования Си такие необоснованные расширения библиотек практически исчезли, но в ранних версиях языка подобный разнобой был очень велик. К сожалению, наборы функций второй категории не согласованы даже для различных систем программирования в рамках одной операционной системы на одном типе архитектур компьютеров. Это четко прослеживается на примере систем программирования Turbo C от Borland и Microsoft C: библиотечные функции, обеспечивающие интерфейс для вызова одной и той же функции операционной системы, могут иметь не только разные параметры, но и разные названия.

Эти несогласованности объяснялись, с одной стороны, коммерческими соображениями стремлением удержать под контролем рынок программного обеспечения, чтобы пользователи, начавшие программировать с использованием одной системы программирования, покупали затем более новые программные продукты той же фирмы, а с другой стороны, поздним появлением стандарта на язык и на его библиотеки и независимые эволюции от версии к версии каждой системы программирования [3]. (Напомним, что стандарт языка был принят примерно через пятнадцать лет после его появления и через десять лет после того, как его уже начали активно использовать) При этом, надо отметить, происходило постепенное сближение различных систем программирования по мере того, как каждая из них заимствовала наиболее ценные идеи у конкурентов. Так, различия между библиотеками последних систем программирования Turbo C и Microsoft C практически отсутствуют.

Стандарт ANSI C

Здесь содержатся нестрогие выдержки из стандарта ISO/IEC 9899:1993 — Programming language C, касающиеся некоторых соглашений о стандартных библиотеках.

1. Каждая функция описывается в библиотеке, где содержатся прототипы (описания) нескольких схожих функций (например, функции ввода/вывода) и, при необходимости, требуемые структуры данных и макроопределения. Библиотека подключается путем указания директивы препроцессора #include за которым следует заголовок библиотеки;

2. Стандартными заголовками являются: <assert.h>, <complex.h>, <ctype.h>, <errno.h>, <fenv.h>, <float.h>, <inttypes.h>, <iso646.h>, <limits.h>, <local.h>, <math.h>, <setjmp.h>, <signal.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdio.h>, <stdlib.h>, <strng.h>, <tgmath.h>, <time.h>, <wchar.h>, <wctype.h>;

3. Все стандартные баблиотеки могут включаться в программу в любом месте, предусмотренном синтаксисом языка, кроме библиотеки <assert.h> (результат зависит от значения переменной NDEBUG). Это не оказывает никакого влияния на эффективность программы. Однако корректное выполнение любой функции, может быть произведено, только если библиотека, ее описывающая, будет включена в программу раньше вызова этой функции;

4. Программа не может содержать переменных, имена которых лексически полностью совпадают с макроопределениями в какой - либо подключенной библиотеки. В противном случае, препроцессор в программе заменит имена макросов на вновь определенные, а не на библиотечные выражения;

5. Библиотеки не должны включать определения локальных переменных без указания external (external linkage).




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: