Введение

Типы данных, поддерживаемые языком программирования C. В языке программирования C типы данных определяют семантику и характеристики хранения элементов данных. Они выражаются в синтаксисе языка в виде объявлений для областей памяти или переменных. Типы данных также определяют типы операций или способы обработки элементов данных. Язык C предоставляет базовые арифметические типы, такие как целочисленные и типы вещественных чисел, а также синтаксис для построения массивов и составных типов. Заголовочные файлы стандартной библиотеки C, подключаемые с помощью директив `#include`, содержат определения поддерживаемых типов, обладающих дополнительными свойствами, например, обеспечивающих хранение данных фиксированного размера, независимо от реализации языка на конкретных аппаратных платформах.

Бито-точные типы целых чисел

С C23 язык позволяет программисту определять целые числа с шириной в произвольное количество бит. Эти типы задаются как , где N — целочисленное константное выражение, обозначающее количество бит, включая знаковый бит для знаковых типов, представленных в дополнительном коде. Максимальное значение N определяется константой BITINT MAXWIDTH и составляет не менее ULLONG WIDTH. Следовательно, тип (или ) принимает значения от -2 до 1, а тип — от 0 до 3. Также существует тип , который может принимать только значения 0 или 1 и не имеет эквивалентного знакового типа.

Размер и типы разности указателя

Спецификация языка C включает типы `size_t` и `ptrdiff_t` для представления величин, связанных с памятью. Их размер определяется в соответствии с арифметическими возможностями целевого процессора, а не с характеристиками памяти, такими как доступное адресное пространство. Оба этих типа определены в заголовочном файле `<stddef.h>` (в C++ – `cstddef`). `size_t` – это беззнаковый целочисленный тип, используемый для представления размера любого объекта (включая массивы) в конкретной реализации. Оператор `sizeof` возвращает значение типа `size_t`. Максимальный размер `size_t` задается макроконстантой `SIZE_MAX`, определенной в заголовочном файле `<stdint.h>` (в C++ – `cstdint`). Гарантируется, что `size_t` имеет ширину не менее 16 бит. Кроме того, POSIX определяет тип `ssize_t`, который является знаковым целочисленным типом той же ширины, что и `size_t`.

`ptrdiff_t` – это знаковый целочисленный тип, используемый для представления разности между указателями. Он гарантированно корректен только для указателей одного и того же типа; вычитание указателей разных типов определяется реализацией.

Интерфейс с свойствами основных типов

Информация о фактических свойствах, таких как размер, основных арифметических типов предоставляется посредством макроконстант в двух заголовочных файлах: <limits.h> (climits в C++) определяет макросы для целочисленных типов, а <float.h> (cfloat в C++) – макросы для типов с плавающей точкой. Конкретные значения зависят от реализации.

Типы целых чисел с фиксированной шириной

Стандарт C99 включает определения нескольких новых целочисленных типов для повышения переносимости программ. Однако более распространенное название atomic может быть использовано, если включен заголовочный файл <stdatomic.h>. Из них const является наиболее известным и широко используемым, он встречается в стандартной библиотеке и при любом значительном использовании языка C, который должен соответствовать принципам const-корректности. Другие спецификаторы используются в программировании низкого уровня, и хотя они широко распространены в этой области, типичные программисты используют их редко.