Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Керниган, Ричи Весь текст 454.51 Kb

Язык Си

Предыдущая страница Следующая страница
1 ... 25 26 27 28 29 30 31  32 33 34 35 36 37 38 39
двойные кавычки, как, наприимер,"...". Строка имеет тип
"массив массивов" и класс памяти STATIC (см. Пункт 4 ниже).
Строка инициализирована указанными в ней символами. Все
строки, даже идентично записанные, считаются различными.
Компилятор помещает в конец каждой строки нулевой байт \0, с
тем чтобы просматривающая строку программа могла определить
ее конец. Перед стоящим внутри строки символом двойной ка-
вычки " должен быть поставлен символ обратной косой черты \;
кроме того, могут использоваться те же условия последова-
тельности, что и в символьных константах. И последнее, об-
ратная косая черта \, за которой непосредственно следует
символ новой строки, игнорируется.

     10.6. Характеристики аппаратных средств

    Следующая ниже таблица суммирует некоторые свойства ап-
паратного оборудования, которые меняются от машины к машине.
Хотя они и влияют на переносимость программ, на практике они
представляют маленькую проблему, чем это может казаться за-
ранее.
          Таблица 1
 -------------------------------------------------------
   DEC PDP-11   HONEYWELL      IBM 370    INTERDATA 8/32
   ASCII        ASCII          EBCDIC     ASCII
 CHAR   8 BITS  9 BITS         8 BITS     8 BITS
 INT    16      36             32         32
 SHORT  16      36             16         16
 LONG   32      36             32         32
 FLOAT  32      36             32         32
 DOUBLE 64      72             64         64
 RANGE -38/+38 -38/+38         -76/+76    -76/+76
---------------------------------------------------------------------------

     11. Синтаксическая нотация

    В используемой в этом руководстве синтаксической нотации
синтаксические категории выделяются курсивом (прим. перев.:
в настоящее время синтексические категории вместо курсивом
выделяются подчеркиванием), а литерные слова и символы -
жирным шрифтом. Альтернативные категории перечисляются на
отдельных строчках. Необязательный символ, терминальный или
нетерминальный, указывается индексом "необ", так что

   \( выражение
    --------- необ \)

указывает на необязательное выражение, заключенное в фигур-
ных скобках. Синтаксис суммируется в пункте 18.

     12. Что в имени тебе моем?

    Язык "C" основывает интерпретацию идентификатора на двух
признаках идентификатора: его классе памяти и его типе.
Класс памяти определяет место и время хранения памяти, свя-
занной с идентификатором; тип определяет смысл величин, на-
ходящихся в памяти, определенной под идентификатором.
    Имеются четыре класса памяти: автоматическая, статичес-
кая, внешняя и регистровая. Автоматические переменные явля-
ются локальными для каждого вызова блока и исчезают при вы-
ходе из этого блока. Статические переменные являются локаль-
ными, но сохраняют свои значения для следующего входа в блок
по существу является одномерным массивом, каждый элемент ко-
Внешние переменные существуют и сохраняют свои значения в
течение выполнения всей программы и могут использоваться для
связи между функциями, в том числе и между независимо ском-
пилированными функциями. Регистровые переменные хранятся
(ели это возможно) в быстрых регистрах машины; подобно авто-
матическим переменным они являются локальными для каждого
блока и исчезают при выходе из этого блока.

    В языке "C" предусмотрено несколько основных типов
объектов:
    объекты, написанные как символы (CHAR), достаточно вели-
ки, чтобы хранить любой член из соответствующего данной реа-
лизации внутреннего набора символов, и если действительный
символ из этого набора символов хранится в символьной пере-
менной, то ее значение эквивалентно целому коду этого симво-
ла. В символьных переменных можно хранить и другие величины,
но реализация будет машинно-зависимой.
    Можно использовать до трех размеров целых, описываемых
как SHORT INT, INT и LONG INT. Длинные целые занимают не
меньше памяти, чем короткие, но в конкретной реализации мо-
жет оказаться, что либо короткие целые, либо длинные целые,
либо те и другие будут эквивалентны простым целым. "Простые"
целые имеют естественный размер, предусматриваемый архиитек-
турой используемой машины; другие размеры вводятся для удво-
летворения специальных потребностей.
    Целые без знака, описываемые как UNSIGNED, подчиняются
законам арифметики по модулю 2**N, где N - число битов в их
представлении. (На PDP-11 длинные величины без знака не пре-
дусмотрены).
    Плавающие одинарной точности (FLOAT) и плавающие двойной
точности (DOUBLE) в некоторых реализациях могут быть синони-
мами.
    Поскольку объекты упомянутых выше типов могут быть ра-
зумно интерпретированы как числа, эти типы будут называться
арифметическими. типы CHAR и INT всех размеров совместно бу-
дут называться целочисленными. Типы FLOAT и DOUBLE совместно
будут называться плавающими типами.
    Кроме основных арифметических типов существует концепту-
ально бесконечный класс производных типов, которые образуют-
ся из основных типов следующим образом:
     массивы объектов большинства типов;
     функции, которые возвращают объекты заданного типа;
     указатели на объекты данного типа;
     структуры, содержащие последовательность объектов
     различных типов;
     объединения, способные содержать один из нескольких
       объектов различных типов.
    Вообще говоря, эти методы построения объектов могут при-
меняться рекурсивно.

     13. Объекты и L-значения

    Объект является доступным обработке участком памяти;
L-значение - это выражение, ссылающееся на объект. Очевидным
примером выражения L-значения является идентификатор. Сущес-
твуют операции, результатом которых являются L-значения; ес-
ли, например, E - выражение указанного типа, то *E является
выражением L-значения, ссылающимся на объект E. Название
"L-значение" происходит от выражения присваивания E1=E2, в
котором левая часть должна быть выражением L-значения. При
последующем обсуждении каждой операции будет указываться,
ожидает ли она операндов L-значения и выдает ли она L-значе-
ние.

     14. Преобразования

    Ряд операций может в зависимости от своих операндов вы-
зывать преобразование значение операнда из одного типа в
другой. В этом разделе объясняются результаты, которые сле-
дует ожидать от таких преобразований. В п. 14.6 Подводятся
итоги преобразований, требуемые большинством обычных опера-
ций; эти сведения дополняются необходимым образом при обсуж-
дении каждой операции.

     14.1. Символы и целые

    Символ или короткое целое можно использовать всюду, где
можно использовать целое. Во всех случаях значение преобра-
зуется к целому. Преобразование более короткого целого к бо-
лее длинному всегда сопровождается знаковым расширением; це-
лые являются величинами со знаком. Осуществляется или нет
знаковое расширение для символов, зависит от используемой
машины, но гарантируется, что член стандартного набора сим-
волов неотрицателен. из всех машин, рассматриваемых в этом
руководстве, только PDP-11 осуществляет знаковое расширение.
область значений символьных переменных на PDP-11 меняется от
-128 до 127; символы из набора ASC11 имеют положительные
значения. Символьная константа, заданная с помощью восьме-
ричной условной последовательности, подвергается знаковому
расширению и может оказаться отрицательной; например, '\377'
имеет значение -1.
    Когда более длинное целое преобразуется в более короткое
или в CHAR, оно обрезается слева; лишние биты просто отбра-
сываются.

     14.2. Типы FLOAT и DOUBLE

    Вся плавающая арифметика в "C" выполняется с двойной
точностью каждый раз, когда объект типа FLOAT появляется в
выражении, он удлиняется до DOUBLE посредством добавления
нулей в его дробную часть. когда объект типа DOUBLE должен
быть преобразован к типу FLOAT, например, при присваивании,
перед усечением DOUBLE округляется до длины FLOAT.

     14.3. Плавающие и целочисленные величины

    Преобразование плавающих значений к целочисленному типу
имеет тенденцию быть до некоторой степени машинно-зависимым;
в частности направление усечения отрицательных чисел меняет-
ся от машине к машине. Результат не определен, если значение
не помещается в предоставляемое пространство.
    Преобразование целочисленных значений в плавающие выпол-
няется без осложнений. Может произойти некоторая потеря точ-
ности, если для результата не содержится достаточного коли-
чества битов.

     14.4. Указатели и целые

    Целое или длинное целое может быть прибавлено к указате-
лю или вычтено из него; в этом случае первая величина преоб-
разуется так, как указывается в разделе описания операции
сложения.

    Два указателя на объекты одинакового типа могут быть
вычтены; в этом случае результат преобразуется к целому, как
указывается в разделе описания операции вычитания.

     14.5. Целое без знака

    Всякий раз, когда целое без знака объединяется с простым
целым, простое целое преобразуется в целое без знака и ре-
зультат оказывается целым без знака. Значением является наи-
меньшее целое без знака, соответствующее целому со знаком
(по модулю 2**размер слова). В двоичном дополнительном пред-
ставлении это преобразование является чисто умозрительным и
не изменяет фактическую комбинацию битов.
    Когда целое без знака преобразуется к типу LONG, значе-
ние результата совпадает со значением целого без знака. Та-
ким образом, это преобразование сводится к добавлению нулей
слева.

     14.6. Арифметические преобразования

    Подавляющее большинство операций вызывает преобразование
и определяет типы результата аналогичным образом. Приводимая
ниже схема в дальнейшем будет называться "обычными арифмети-
ческими преобразованиями".
Сначала любые операнды типа CHAR или SHORT преобразуются в
  INT, а любые операнды типа FLOAT преобразуются в DOUBLE.
Затем, если какой-либо операнд имеет тип DOUBLE, то другой
  преобразуется к типу DOUBLE, и это будет типом результата.
В противном случае, если какой-либо операнд имеет тип LONG,
  то другой операнд преобразуется к типу LONG, и это и будет
  типом результата.
В противном случае, если какой-либо операнд имеет тип
  UNSIGNED, то другой операнд преобразуется к типу UNSIGNED,
  и это будет типом результата.
В противном случае оба операнда будут иметь тип INT, и это
  будет типом результата.

     15. Выражения

    Старшинство операций в выражениях совпадает с порядком
следования основных подразделов настоящего раздела, начиная
с самого высокого уровня старшинства. Так, например, выраже-
ниями, указываемыми в качестве операндов операции +
(п.15.4), Являются выражения, определенные в п.п.15.1-15.3.
Внутри каждого подраздела операции имеет одинаковое старшин-
ство. В каждом подразделе для описываемых там операций ука-
зывается их ассоциативность слева или справа. Старшинство и
ассоциативность всех операций в выражениях резюмируются в
грамматической сводке в п.18.
    В противном случае порядок вычислений выражений не опре-
делен. В частности, компилятор считает себя в праве вычис-
лять подвыражения в том порядке, который он находит наиболее
эффективным, даже если эти подвыражения приводят к побочным
эффектам. Порядок, в котором происходят побочные эффекты, не
специфицируется. Выражения, включающие коммутативные и ассо-
циативные операции ( *,+,&,!,^ ), могут быть переупорядочены
произвольным образом даже при наличии круглых скобок; чтобы
вынудить определенный порядок вычислений, в этом случае не-
обходимо использовать явные промежуточные переменные.

    При вычислении выражений обработка переполнения и про-
верка при делении являются машинно-зависимыми. Все существу-
ющие реализации языка "C" игнорируют переполнение целых; об-
работка ситуаций при делении на 0 и при всех особых случаях
с плавающими числами меняется от машины к машине и обычно
выполняется с помощью библиотечной функции.

     15.1. Первичные выражения

    Первичные выражения, включающие ., ->, индексацию и об-
Предыдущая страница Следующая страница
1 ... 25 26 27 28 29 30 31  32 33 34 35 36 37 38 39
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама