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 совместно будут называться плавающими типами.

Кроме основных арифметических типов существует концептуальнобесконечный класс производных типов, которые образуются из основныхтипов следующим образом:

  • массивы об'ектов большинства типов;
  • функции, которые возвращают об'екты заданного типа;
  • указатели на об'екты данного типа;
  • структуры, содержащие последовательность об'ектов различных типов;
  • об'единения, способные содержать один из нескольких об'ектов различных типов.

Вообще говоря, эти методы построения об'ектов могут применятьсярекурсивно.