RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Апрель 2024
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930     

Календарь Календарь

Последние темы
» Вити больше нет!
автор bug19 Пн Фев 20 2023, 19:54

» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47

» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05

» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03

» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02

» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52

» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36

» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37

» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33

» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00

» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17

» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07

» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08

» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09

» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02

» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47

» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11

» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33

» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38

» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12

» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01

» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22

» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08

» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08

Самые активные пользователи за месяц
Нет пользователей

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Стандартная библиотека языка Си.

Перейти вниз

Стандартная библиотека языка Си. Empty Стандартная библиотека языка Си.

Сообщение  Viktor2312 Чт Янв 07 2021, 22:38

1
Стандартная библиотека языка Си.


Стандартной библиотекой языка Си (также известная как libc, crt) называется часть стандарта ANSI C, посвящённая заголовочным файлам и библиотечным подпрограммам. Является описанием реализации общих операций, таких как обработка ввода-вывода и строк, в языке программирования Си. Стандартная библиотека языка Си — это описание программного интерфейса, а не настоящая библиотека, пригодная для использования в процессе компиляции.

ANSI C — стандарт языка C, опубликованный Американским национальным институтом стандартов (ANSI). Следование этому стандарту помогает создавать легко портируемые программы
.

В программировании заголовочный файл (англ. header file) или подключаемый файл — файл, содержимое которого автоматически добавляется препроцессором в исходный текст в том месте, где располагается некоторая директива (#include <file.h>).

Библиоте́ка (от англ. library) в программировании — сборник подпрограмм или объектов, используемых для разработки программного обеспечения (ПО).

Ввод-вывод (от англ. input/output, I/O) в информатике — взаимодействие между обработчиком информации (например, компьютер) и внешним миром, который может представлять как человек (субъект), так и любая другая система обработки информации.

В программировании, строковый тип (англ. string «нить, вереница») — тип данных, значениями которого является произвольная последовательность (строка) символов алфавита.

API (программный интерфейс приложения, интерфейс прикладного программирования) (англ. application programming interface, API [эй-пи-ай]) — описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой.


Структура.

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


Мнения о структуре.

Большая часть стандартной библиотеки языка Си производит впечатление удачно спроектированной. Некоторые отдельные части, дававшие преимущество в прошлом, могут провоцировать ошибки. Функции строкового ввода gets() (и применение scanf() для считывания вводимых строк) являются источником множества переполнений буфера, поэтому большинство руководств по программированию советуют избегать подобных приёмов. Функция strcpy() также весьма печально знаменита. Ещё одной неоднозначной функцией является strtok() — функция, разработанная как простейший лексический анализатор, но имеющая множество «подводных камней» и потому весьма трудная в использовании.

Выбор применения типа size_t вместо int для числа элементов, указанных для fread() и fwrite() является несовместимым с разработанной общей семантикой для size_t (для представления количества байтов).

stdio достаточно ограничен (слишком высокий уровень для использования во многих ситуациях), и стандарт не позволяет пользователю самостоятельно переназначать или расширять его свойства. В итоге, для множества приложений разрабатываются собственные библиотеки-обёртки вокруг механизмов более низкого уровня и функций, реализуемых ОС, таких как POSIX. Например, stdio не работают с сигналами или асинхронными не пакетными режимами ввода-вывода, которые широко используются в сетевых серверах. В итоге, на функции stdio могут полностью полагаться только серверы, использующие модель целого процесса для клиента, для обслуживания их на POSIX-совместимых системах в пакетном режиме ввода-вывода.

Определённых функций стандартной библиотеки нужно избегать при разработке многопоточных приложений. Примитивы контроля потоков предназначались для оставшейся части ОС и игнорируют общие стандарты, как например, библиотеку потоков POSIX, ожидая, что программисты языка Си самостоятельно об этом позаботятся, работая с повторным использованием и синхронизацией. Ни язык Си, ни его стандартная библиотека никак не проверяют подобные системно-специфичные результаты.


История.

Язык программирования Си до стандартизации не обеспечивал встроенной функциональности, как, например, операции ввода-вывода (в отличие от таких традиционных языков, как Кобол и Фортран). Позже, в сообществе программистов, работавших с языком Си, зародились идеи, которые реализовались в то, что мы сейчас называем Стандартной библиотекой языка Си, для поддержки этой функциональности. Большинство этих идей в итоге объединились в определении стандарта языка программирования Си.

И Unix, и Си были созданы в AT&T’s Bell Laboratories в конце 1960-х — начале 1970-х. В 1970-е язык программирования Си начал пользоваться невероятной популярностью. Множество университетов и организаций начали создание собственных вариантов языка, более подходящих для собственных нужд. С началом 1980-х проблемы совместимости между различными реализациями языка Си стали слишком очевидными. В 1983 году Американский национальный институт стандартов (ANSI) сформировал комитет для принятия стандарта языка Си, известный как «ANSI Си». Эта работа вылилась в создание так называемого стандарта C89 в 1989 году. Часть итогового стандарта была набором библиотек, названная Стандартная библиотека ANSI Си.

Последующие версии стандарта языка Си добавляли некоторые новые и наиболее полезные заголовочные файлы в библиотеку. Поддержка этих новых расширений зависела от реализации.

Заголовочные файлы <iso646.h>, <wchar.h> и <wctype.h> были добавлены в Приложении 1 (сокращенно NA1) — дополнении к Стандарту языка Си, ратифицированному в 1995 году.

Заголовочные файлы <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> и <tgmath.h> были добавлены в C99, версии Стандарта языка Си, опубликованном в 1999 году.


Стандарт ANSI.

Стандартная библиотека ANSI Си состоит из 24 заголовочных файлов, каждый из которых можно подключать к программному проекту при помощи одной директивы. Каждый заголовочный файл содержит объявления одной или более функций, определения типов данных и макросы. Содержание этих заголовочных файлов перечисляется ниже.

В сравнении с некоторыми другими языками (например Java) стандартная библиотека крайне мала. Библиотека обеспечивает поддержку основного набора математических функций, обработку строк, конвертацию типов, файловый и консольный ввод-вывод. Она не содержит стандартный набор «контейнерных типов» как стандартная библиотека шаблонов языка C++, компоненты для работы с графическим пользовательским интерфейсом (GUI), сетью и прочей разнообразной функциональности, которую Java поддерживает по стандарту. Главным преимуществом маленькой стандартной библиотеки является упрощение работы с окружением ANSI Си по сравнению с другими языками, а следовательно и упрощение портирования программ на языке Си на новые платформы.

Множество прочих библиотек было разработано для поддержки схожей функциональности, обеспечиваемой другими языками в их стандартных библиотеках. Например, в проекте разработки окружения рабочего стола GNOME был разработан набор графических инструментов GTK+ и GLib — библиотека контейнерных структур данных, как впрочем и множество других известных примеров. Разнообразие доступных библиотек означает, что некоторые инструменты верхнего уровня, со временем подтвердили свою полезность. Значительным минусом является то, что они часто не слишком успешно взаимодействуют друг с другом, поэтому программистам зачастую привычнее работать с различными наборами библиотек, а их наборы могут быть доступны на различных специфических платформах.


Библиотечные заголовочные файлы ANSI Си c дополнениями C99 и C11.

<assert.h>
Содержит макрос утверждений, используемый для обнаружения логических и некоторых других типов ошибок в отлаживаемой версии программы.

<complex.h>
Набор функций для работы с комплексными числами. (Появилось в C99).

<ctype.h>
Содержит функции, используемые для классификации символов по их типам или для конвертации между верхним и нижним регистрами независимо от используемой кодировки (обычно ASCII или одно из её расширений, хотя есть и реализации, использующие EBCDIC).

<errno.h>
Для проверки кодов ошибок, возвращаемых библиотечными функциями.

<fenv.h>
Для управления средой, использующей числа с плавающей точкой. (Появилось в C99).

<float.h>
Содержит заранее определенные константы, описывающие специфику реализации свойств библиотеки для работы с числами с плавающей точкой, как, например, минимальная разница между двумя различными числами с плавающей точкой (_EPSILON), максимальное число цифр точности (_DIG) и область допустимых чисел (_MIN, _MAX).

<inttypes.h>
Для точной конвертации целых типов. (Появилось в C99).

<iso646.h>
Для программирования в кодировке ISO 646. (Появилось в NA1).

<limits.h>
Содержит заранее заданные константы, определяющие специфику реализации свойств целых типов, как, например, область допустимых значений (_MIN, _MAX).

<locale.h>
Для setlocale() и связанных констант. Используется для выбора соответствующего языка.

<math.h>
Для вычисления основных математических функций.

<setjmp.h>
Объявляет макросы setjmp и longjmp, используемые для нелокальных переходов.

<signal.h>
Для управления обработкой сигналов.

<stdarg.h>
Для доступа к различному числу аргументов, переданных функциям.

<stdbool.h>
Для булевых типов данных. (Появилось в C99).

<stdint.h>
Для определения различных типов целых чисел. (Появилось в C99).

<stddef.h>
Для определения нескольких стандартных типов и макросов.

<stdio.h>
Реализует основные возможности ввода и вывода в языке Си. Этот файл содержит весьма важную функцию printf.

<stdlib.h>
Для выполнения множества операций, включая конвертацию, генерацию псевдослучайных чисел, выделение памяти, контроль процессов, окружения, сигналов, поиска и сортировки.

<string.h>
Для работы с различными видами строк.

<tgmath.h>
Для типовых математических функций. (Появилось в C99).

<threads.h>
Заголовочный файл <threads.h> наряду с <stdatomic.h> предоставляет поддержку для параллельного программирования. (Появилась в C11).

<time.h>
Для конвертации между различными форматами времени и даты.

<wchar.h>
Для обработки «широких» потоков и нескольких видов строк при помощи «широких» символов (поддержка набора языков). (Появилось в NA1).

<wctype.h>
Для классификации «широких» символов. (Появилось в NA1).


Стандартная библиотека Си в других языках.

Некоторые языки обеспечивают функциональность стандартной библиотеки Си при помощи своих собственных библиотек. Библиотека может быть адаптирована для структур языка, но семантика операций остается схожей. Язык программирования C++, например, содержит функциональность стандартной библиотеки ANSI Си в пространстве имен std (например, std::printf, std::atoi, std::feof и т. д.), в заголовочных файлах со схожими именами как в Си («cstdio», «cmath», «cstdlib» и т. д.). К другим языкам, в которых применяются схожие подходы относятся, например, D и Python. В последнем, к примеру, встроенный объект file определен как «реализованный при помощи пакета stdio языка Си», так что доступные операции (открытие, чтение, запись и т. д.), как ожидается, должны иметь поведение как у соответствующих функций языка Си.


Общая поддержка библиотек.

Пока не стандартизировано, но программы на языке Си могут зависеть от библиотек подпрограмм, которые содержат код, используемый компилятором во время работы. Код, инициализирующий процесс для операционной системы, например, перед вызовом main(), реализован в библиотеке времени исполнения языка Си (C Run-Time Library, CRT) для данной версии компилятора. Код библиотеки CRT может помочь с реализацией других особенностей языка, как например, обработка не перехваченных исключений или реализация работы с числами с плавающей точкой.

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

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


Встроенные функции компилятора.

Некоторые компиляторы (например, GCC) поддерживают внутренние версии множества функций Стандартной библиотеки языка Си; то есть, реализации функций записываются в компилируемый объектный модуль, а программа вызывает внутренние версии вместо функций общей библиотеки Си. Это уменьшает накладные расходы при вызове функции, особенно если вызов функции заменяется встроенными вариантами, и разрешается использование других форм оптимизации (если компилятор поддерживает управление характеристиками внутренних вариантов), но может приводить к проблемами при отладке (например, внутренние версии не могут быть заменены инструментальными версиями для проверки).


Стандартная библиотека POSIX.

POSIX (и SUS) определяют число подпрограмм, которые могут быть доступны помимо определенных в Стандартной библиотеке языка Си; они часто реализуют аналогичную функциональность со Стандартной библиотекой с различной степенью схожести. Например, glibc реализует такие функции как fork в libc.so, но перед вызовом библиотеки потоков объединяются в glibc, хотя это заявлено как отдельная библиотека с собственным флагом линковщика. Зачастую, такая POSIX-совместимая функциональность рассматривается как часть библиотеки; соответствующая библиотека Си, таким образом, может быть идентифицирована как ANSI или ISO библиотека языка Си.


Реализации.

Существует множество реализаций, поставляемых как с различными операционными системами, так и с компиляторами языка Си. На BSD системах, к примеру, системная библиотека встроена в операционную систему и поддерживается общим репозиторием исходников. На большинстве систем библиотека может быть найдена под именем «libc».

Хотя существует очень много реализаций, вот небольшой список самых популярных библиотек:

  • GNU C Library — самая распространенная реализация, используемая в Linux.

  • Microsoft C Run-time Library.

  • dietlibc — альтернативная небольшая реализация Стандартной библиотеки языка Си.

  • uClibc — Стандартная библиотека языка Си для встраиваемых систем на базе Linux.

  • Newlib — Стандартная библиотека языка Си для встраиваемых систем (MMU-less).

  • klibc — применяется главным образом для загрузки Linux-систем.

  • eglibc — разновидность glibc для встраиваемых систем.

  • musl — реализация стандартной библиотеки языка Си для Linux, стремящаяся быть совместимой в первую очередь с современными стандартами, во вторую очередь с glibc.


***

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Стандартная библиотека языка Си. Empty .

Сообщение  Viktor2312 Пт Янв 08 2021, 13:50

2
assert.h


assert.h — заголовочный файл стандартной библиотеки языка программирования С, в котором объявляется макрос препроцессора языка С assert(). Данный макрос реализует исключение, которое может использоваться для проверки сделанных программой вычислений.


Макросы.

Макрос assert() добавляет к программе процедуру диагностики. После выполнения, если выражение ложно (то есть, результат сравнения 0), assert() пишет информацию о вызове в поток stderr и вызывает функцию abort(). Информация, которая пишется в stderr включает в себя:

  • имя файла с исходным кодом (предопределённый макрос __FILE__);

  • строка у файла с исходным кодом (предопределённый макрос __LINE__);

  • функция в исходном коде (предопределённый макрос __func__) (добавлено в стандарте C99);

  • текст выражения, значение которого равно нулю 0.

Для того, чтобы отключить проверку, необязательно исключать её из кода или комментировать объявление макроса, достаточно лишь объявить ещё один макрос — NDEBUG в программе перед #include <assert.h>:

Стандартная библиотека языка Си. 9ed_0151

тогда объявление макроса assert() будет иметь следующий вид:

Стандартная библиотека языка Си. 9ed_0152

и поэтому никак не будет влиять на работу программы.

Макрос assert() переопределяется каждый раз при подключении assert.h в зависимости от макроса NDEBUG.

Макрос assert() реализован в виде макроса, а не функции. Если макрос assert используется для возможности вызывать саму функцию assert, то верное функционирование кода не гарантируется.


Пример использования.

Стандартная библиотека языка Си. 9ed_0153

В данном примере макрос assert() сработает в случае, если функция fopen() выполнится с ошибкой.


***


Дополнение.

void assert(int exp)

Макрос assert() пишет сообщение об ошибке в stderr и завершает программу в том случае, если выражение ехр равно 0. В противном случае, если ехр не равно 0, макрос assert() не производит никаких действий.

Вывод имеет следующий формат:

Assertion failed: ехр, file , line


Макрос assert() обычно используется для проверки корректности работы программы.

Нет необходимости удалять инструкцию assert() из исходного кода после отладки программы, поскольку если макрос NDEBUG определен перед включением заголовочного файла assert.h, то макрос assert() игнорируется.

Следующий фрагмент кода используется для тестирования данных, прочитанных с последователь­ного порта в формате ASCII (это означает, что седьмой разряд не используется):

Стандартная библиотека языка Си. 9ed_0173


...


Последний раз редактировалось: Viktor2312 (Вс Янв 10 2021, 00:37), всего редактировалось 1 раз(а)

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Стандартная библиотека языка Си. Empty .

Сообщение  Viktor2312 Пт Янв 08 2021, 14:29

3
complex.h (C99).


complex.h — заголовочный файл стандартной библиотеки языка программирования С, в котором объявляются функции для комплексной арифметики. Эти функции используют встроенный тип complex, который появился в стандарте C99.


Макросы и типы данных.

Файл определяет следующие макросы и типы данных:

Стандартная библиотека языка Си. 9ed_0154

для работы с комплексными и мнимыми числами. Макросы imaginary должны быть объявлены только если платформа поддерживает работу с мнимыми числами (Опциональная часть стандарта C99 "Annex G").

Макрос I раскрывается либо в _Imaginary_I либо в _Complex_I. В отличие от обычного запрещения переопределений библиотечных макросов стандарт разрешает переопределять I, complex и imaginary.


Директивы компилятора.

Стандарт C99 описывает следующую директиву компилятора (прагму), используемую при работе с комплексными числами:

Стандартная библиотека языка Си. 9ed_0155

Обычные математические формулы для комплексного умножения, деления и нахождения абсолютного значения проблематичны из-за бесконечности и переполнения. Эта директива уведомляет (при флаге on) среду о том, что можно использовать обычные математические формулы. Цель этой директивы - разрешить окружению использовать следующие функции:

Стандартная библиотека языка Си. 9ed_0156

если программист считает их безопасными.


Функции.

Тригонометрические.

Функции в заголовочном файле complex.h представлены для трёх типов — double, float и long double (значения представлены в радианах):

Стандартная библиотека языка Си. 9ed_0157

для вычисления тригонометрических значений синуса, косинуса, тангенса и котангенса для комплексных чисел.


Гиперболические.

Стандартная библиотека языка Си. 9ed_0158

Функции вычисляют гиперболический косинус, синус, тангенс, котангенс для комплексных чисел.


Экспоненциальные и логарифмические.

Стандартная библиотека языка Си. 9ed_0159

Функции вычисляют логарифм и экспоненту для комплексных чисел.


Степенные и абсолютные.

Стандартная библиотека языка Си. 9ed_0160

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


Управляющие.

Стандартная библиотека языка Си. 9ed_0161

Функции семейства carg возвращают значение аргумента комплексного числа z на интервале
[от -pi до +pi ]. Функции семейства cimag возвращают мнимую часть числа z. Функции семейства creal возвращают действительную часть числа z.


***

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Стандартная библиотека языка Си. Empty .

Сообщение  Viktor2312 Сб Янв 09 2021, 00:05

4
ctype.h


ctype.h — заголовочный файл стандартной библиотеки языка программирования С, содержащий объявления функций для классификации и преобразования отдельных символов.


Функции.

Все перечисленные ниже функции имеют прототипы следующего вида:

int имя_функции( int );

Все эти функции принимают в качестве аргумента int-эквивалент символа и возвращают значение типа int, которое может представлять или другой символ (в случае функций преобразования), или логическое значение: 0 означает «Ложь», а отличное от нуля значение — «Истина» (это относится к функциям классификации).

Поведение этих функций зависит от текущей кодировки.

Результат применения этих функций к символам с кодами, принадлежащими расширенной кодировке времени выполнения (англ. extended execution characterset) зависит от платформы и локализации.


Функции классификации.

Стандартная библиотека языка Си. 9ed_0162

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


Функции преобразования.

Стандартная библиотека языка Си. 9ed_0163

Функции преобразуют символ c в нижний или верхний регистр, если это возможно. В противном случае они возвращают не изменённое значение.


Реализация функций.

В большинстве библиотек языка C подпрограммы классификации используют статические таблицы поиска вместо макросов или функций. Например, создается массив из 256 восьмибитовых целых чисел, где каждый бит означает определенное свойство символа (является цифрой, буквой и т. д.). Если бит 1 показывает, цифра данный символ или нет, то код мог бы быть записан так:

#define isdigit(x) (TABLE[x] & 1)

Ранние версии Linux использовали потенциально опасный код, подобный следующему:

#define isdigit(x) ((x) >= '0' && (x) <= '9')

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

Неправильное использование

Во всех случаях аргумент имеет тип int, причём его значение должно принадлежать диапазону значений типа unsigned char, или же быть равным значению макроконстанты EOF. Если аргумент имеет любое другое значение, поведение функций не определено.

Тип char в зависимости от реализации может быть как знаковым, так и беззнаковым. Если тип char является знаковым, то неявное преобразование в int может привести к появлению отрицательных чисел, что вызовет неопределенное поведение функции. Чаще всего происходит выход за пределы таблицы поиска и аварийное завершение программы.

Стандартная библиотека языка Си. 9ed_0164

Чтобы избежать этого, используя char-аргументы, сперва явно преобразуйте их в int.

int-значения, возвращаемые функциями getchar, getc, fgetc обязательно принадлежат диапазону значений типа unsigned char (или равны EOF), поэтому здесь преобразование не требуется.


Примеры использования.

Стандартная библиотека языка Си. 9ed_0165


***

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Стандартная библиотека языка Си. Empty .

Сообщение  Viktor2312 Пн Янв 11 2021, 13:26

5
errno.h


errno.h — заголовочный файл стандартной библиотеки языка программирования С, содержащий объявление макроса для идентификации ошибок через их код. POSIX-совместимые операционные системы, наподобие Unix и Linux, могут включать другие макросы для определения ошибок через собственные коды errno. Значение errno имеет смысл только тогда, когда системный вызов или функция возвращает признак ошибки.


Макросы и типы.

Стандартная библиотека языка Си. 9ed_0177

Заголовочный файл определяет следующие макросы: EDOM, EILSEQ, ERANGE. Они имеют тип int, имеют положительное значение и могут использоваться в препроцессорных директивах #if. При запуске программы значение errno равно нулю.

Стандартная библиотека языка Си. 9ed_0178

Заголовочный файл определяет errno как изменяемое lvalue, которое может быть макросом или идентификатором с внешним связыванием.

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


POSIX

Сообщение об ошибке может быть получено с помощью потокобезопасной функции strerror_r() (strerror() для однопоточных программ) или выведено в поток ошибок с помощью perror().

Стандарт POSIX определяет следующие символьные имена ошибок:

Стандартная библиотека языка Си. 9ed_0179
Стандартная библиотека языка Си. 9ed_0180


***

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения