Kernighan, B. W. and Ritchie, D. M. "The 'C' Programming Language"; Chapter 13
13. Что значит имя?
Язык "C" основывает интерпретацию идентификатора на двух признакахидентификатора: его классе памяти и его типе. Класс памяти определяетместо и время хранения памяти, связанной с идентификатором; типопределяет смысл величин, находящихся в памяти, определенной подидентификатором.
Имеются четыре класса памяти: автоматическая, статическая, внешняя ирегистровая. Автоматические переменные являются локальными длякаждого вызова блока и исчезают при выходе из этого блока. Статическиепеременные являются локальными, но сохраняют свои значения дляследующего входа в блок даже после того, как управление передается запределы блока. Внешние переменные существуют и сохраняют свои значения втечение выполнения всей программы и могут использоваться для связимежду функциями, в том числе и между независимо скомпилированнымифункциями. Регистровые переменные хранятся (если это возможно) вбыстрых регистрах машины; подобно автоматическим переменным они являютсялокальными для каждого блока и исчезают при выходе из этого блока.
В языке "C" предусмотрено несколько основных типов об'ектов:
- Об'екты, описанные как символы (char), достаточно велики, чтобыхранить любой член из соответствующего данной реализации внутреннегонабора символов, и если действительный символ из этого набора символовхранится в символьной переменной, то ее значение эквивалентно целомукоду этого символа. В символьных переменных можно хранить и другиевеличины, но реализация будет машинно-зависимой.
- Можно использовать до трех размеров целых, описываемых как short int,int и long int. Длинные целые занимают не меньше памяти, чем короткие,но в конкретной реализации может оказаться, что либо короткие целые,либо длинные целые, либо те и другие будут эквивалентны простым целым."Простые" целые имеют естественный размер, предусматриваемыйархитектурой используемой машины; другие размеры вводятся дляудовлетворения специальных потребностей.
- Целые без знака, описываемые как unsigned, подчиняются законамарифметики по модулю 2**n, где n - число битов в их представлении.(На pdp-11 длинные величины без знака не предусмотрены).
- Плавающие одинарной точности (float) и плавающие двойной точности(double) в некоторых реализациях могут быть синонимами.
Поскольку об'екты упомянутых выше типов могут быть разумноинтерпретированы как числа, эти типы будут называться арифметическими.Типы char и int всех размеров совместно будут называться целочисленными.Типы float и double совместно будут называться плавающими типами.
Кроме основных арифметических типов существует концептуальнобесконечный класс производных типов, которые образуются из основныхтипов следующим образом:
- массивы об'ектов большинства типов;
- функции, которые возвращают об'екты заданного типа;
- указатели на об'екты данного типа;
- структуры, содержащие последовательность об'ектов различных типов;
- об'единения, способные содержать один из нескольких об'ектов различных типов.
Вообще говоря, эти методы построения об'ектов могут применятьсярекурсивно.