Вы упоминаете «нативные» типы данных, но обратите внимание, что complex
не определяется спецификацией C и, следовательно, не является нативным типом. Нативные типы для C: char
, int
, float
, double
и void
.
Размер типа данных обычно определяется базовой платформой, а также компилятором. Стандарт C определяет минимальный диапазон для этих типов и определяет несколько относительных отношений (long int
должно быть не меньше обычного int
и т. Д.). Нет простого способа определить абсолютный размер любого типа без его проверки.
При работе с новой платформой, и я не знаю конкретных размеров типов данных, я пишу короткое приложение, которое выдает результат sizeof
для всех стандартных типов Си. Существуют также заголовки, такие как stdint.h
, которые предоставляют типы данных, которым можно доверять, чтобы иметь определенный размер.
Не существует верхней границы для размера типа данных. Стандарт C определяет char
как «достаточно большой для хранения любого члена набора символов выполнения». Это частично связывает размер нативных типов с архитектурой машины, и поэтому теоретический компьютер с исполнительными символами размером до 1 МБ будет иметь sizeof(char)
, равный 1 МБ. С практической точки зрения, вы, вероятно, не найдете машину, где это так.