Многие языковые конструкции определены в терминах встроенных типов. Код, который использует абстрактные типы, отличные от символьных типов, должен быть написан так, чтобы он работал одинаково хорошо, если были заменены большие типы, и код, который основывается на том, что абстрактные типы больше минимальных размеров, указанных в Стандарте, и которые любой может попытаться запустить в системах, где они не должны проверять, чтобы размеры соответствовали требованиям. Обратите внимание, что не имеет значения, объявляет ли код какие-либо объекты абстрактных размеров.
Например, при int16_t x; uint16_t y;
на поведение (0xC000+x > 49152-y)
будет влиять размер int
. Если int
равен 32 битам, то вычисления и сравнения будут выполняться с использованием значений со знаком. Однако, если int
равно 16 битам, левый операнд будет оцениваться как 16-битное значение без знака, а затем переводится в long для сравнения с правой частью, которая будет оцениваться как long со знаком.
Хотя было бы удобно написать код, который мог бы быть независимым в отношении размеров абстрактных типов, простое притворство о том, что такие типы не существуют, не достигнет этого.