Главная страница
Навигация по странице:

  • Перечень изменений

  • 334 Приложение С

  • Б. Керриган, Д. Ритчи Язык программирования C. Б. Керниган, Д. зык программирования и . Издание 3е, исправленное Перевод с английского под редакцией Вс. С. Штаркмана СанктПетербург 2003


    Скачать 31.48 Mb.
    НазваниеБ. Керниган, Д. зык программирования и . Издание 3е, исправленное Перевод с английского под редакцией Вс. С. Штаркмана СанктПетербург 2003
    АнкорБ. Керриган, Д. Ритчи Язык программирования C.pdf
    Дата06.04.2017
    Размер31.48 Mb.
    Формат файлаpdf
    Имя файлаБ. Керриган, Д. Ритчи Язык программирования C.pdf
    ТипКнига
    #4546
    страница27 из 28
    1   ...   20   21   22   23   24   25   26   27   28

    В 11. Зависящие от реализации пределы
    и
    331
    %х местное представление даты
    %Х местное представление времени
    %у год без указания века (00-99)
    %Y год с указанием века
    %Z название временной зоны, если она есть
    В
    Зависящие от реализации пределы:
    и
    Заголовочный файл определяет константы для размеров целочисленных типов. Ниже перечислены минимальные приемлемые ве- личины, но в конкретных реализациях могут использоваться и большие значения.
    CHAR_BIT 8 битов в значении
    SCHAR_MAX UCHAR_MAX или
    SCHAR_MAX максимальное значение r
    CHAR_MIN 0
    минимальное значение r
    +32767 максимальное int
    INT_MIN -32767 минимальное значение int
    +2147463647 максимальное значение long
    LONG_MIN -2147483647 минимальное значение long
    SCHAR_MAX +127 максимальное значение signed r
    -127 минимальное значение signed
    +32767 максимальное значение short
    SHRT_MIN -32767 минимальное значение short
    UCHAR_MAX 255 максимальное значение char
    UINT_MAX 65535 максимальное значение unsigned int
    ULONG_MAX 4294967295 максимальное значение unsigned long
    USHRT_MAX 65535 максимальное значение unsigned short
    Имена, приведенные в следующей таблице, взяты из h> и явля- ются константами, имеющими отношение к арифметике с плавающей точкой. Значения (если они есть) представляют собой минимальные зна- чения для соответствующих величин. В каждой реализации устанавли- ваются свои значения.
    2 основание для представления порядка,
    например: 2, 16
    FLT_ROUNDS способ округления при сложении чисел с плавающей точкой

    332
    Приложение В. Стандартная библиотека
    6
    FLT_EPSILON 1E-5
    FLT_MANT_DIG
    1Е+37 1E-37
    FLT
    EXP
    DBL DIG
    DBL MAX
    DBL MAX EXP
    DBL MIN
    DBL MIN EXP
    10
    DBL EPSILON 1E-9
    DBL MANT DIG
    1E+37 1E-37
    количество верных десятичных цифр минимальное х, такое, что 1.0 + х 1.0
    количество цифр по основанию
    FLT_RADIX в мантиссе максимальное число с плавающей точкой максимальное п, такое, что
    - 1
    представимо минимальное нормализованное число с плавающей точкой минимальное п, такое, что 10" предста- вимо в виде нормализованного числа количество верных десятичных цифр для типа double минимальное х, такое, что 1.0 + х 1.0,
    где х принадлежит типу double количество цифр по основанию
    FLT_RADIX в мантиссе для чисел типа double максимальное число с плавающей точ- кой типа double максимальное п, такое, что
    -1
    представимо в виде числа типа double минимальное нормализованное число с плавающей точкой типа минимальное п, такое, что предста- вимо в виде нормализованного числа типа double

    Приложение С
    Перечень изменений
    С момента публикации первого издания этой книги определение язы- ка Си претерпело изменения. Почти все нововведения - это расширения исходной версии языка, выполненные так, чтобы сохранилась совмести- мость с существующими программами; некоторые изменения касаются устранения двусмысленностей первоначального описания, а некоторые представляют собой модификации, привнесенные существующей прак- тикой. Многие из новых возможностей, впоследствии принятые другими разработчиками Си-компиляторов, были первоначально объявлены в до- кументах, прилагаемых к компиляторам. Комитет ANSI, подготавливая стандарт языка, включил большинство этих изменений, а также ввел дру- гие значительные модификации. Некоторые коммерческие компилято- ры реализовали их еще до выпуска официального Си-стандарта.
    В этом приложении сведены воедино различия между языком, опреде- ленным в первой его редакции, и той его версии, которая принята в каче- стве стандарта. Здесь рассматривается только сам язык; вопросы, относя- щиеся к его окружению и библиотеке, не затрагиваются. Хотя последние и являются важной частью стандарта, но, поскольку в первом издании не делалось попытки описать среду и библиотеку, с соответствующими стандартными элементами сравнивать практически нечего.
    • В стандарте более тщательно, по сравнению с первым изданием, опре- делено и расширено препроцессирование: в его основу явно положены лексемы; введены новые операторы для "склеивания" лексем и создания символьных строк а также новые управляющие строки, такие как ttelif и
    разрешено повторное определение макроса с той же последо- вательностью лексем; отменена подстановка параметров внутри строк.
    Разрешено "склеивание" строк с помощью знака \ в любом месте, не толь- ко в строках и макроопределениях (см. А12).

    334 Приложение С
    • Минимальное число значимых символов всех внутренних идентифи- каторов доведено до 31; для идентификаторов с внешней связью оно остается равным 6; буквы нижнего и верхнего регистров не различают- ся. (Многие реализации допускают большее число значимых символов.)
    • Для знаков \, X,
    которых может не быть в некоторых наборах символов, введены последовательности, начина- ющиеся с ?? (см. А12.1). Следует заметить, что введение последовательностей может повредить значения строк, в которых со- держатся ??.
    • Введены новые ключевые слова (void, const, volatile, signed,
    а мертворожденное слово гу из обращения изъято.
    • Для символьных констант и строковых литералов определены новые эскейп-последовательности. Объявлено, что появление за \ символов не из принятых эскейп-последовательностей приводит к непредсказуе- мому результату (см.
    • Узаконено полюбившееся всем тривиальное изменение: 8 и 9 не явля- ются восьмеричными цифрами.
    • Введен расширенный набор суффиксов для явного указания типов кон- стант:
    для целых и F и L - для типов с плавающей точкой. Уточне- ны также правила определения типа для констант без суффиксов
    • Объявлено, что соседние строки конкатенируются.
    • Предоставлены средства, позволяющие записывать строковые литера- лы и символьные константы из расширенного набора символов
    • Объекты типа
    (как и объекты другого типа) можно специфициро- вать явно со знаком или без знака. Исключается использование слово- сочетания long в смысле double, но вводится тип long double для чисел с плавающей точкой повышенной точности.
    • С некоторых пор доступен тип u n s i g n e d
    Стандарт вводит ключе- вое слово signed для явного указания, что объект типа cha r или другого целочисленного типа имеет знак.
    • Уже несколько лет в большинстве реализаций доступен тип
    Стан- дарт вводит void * в качестве типа обобщенного указателя; раньше для

    Перечень изменений этой цели использовали c h a r *. Одновременно вступают в силу прави- ла, по которым запрещается без преобразования типа "смешивать" ука- затели и целые или указатели разных типов.
    • Стандарт устанавливает минимальные пределы диапазонов арифме- тических типов, предусматривает заголовочные и
    в которых помещаются эти характеристики для каждой кон- кретной реализации.
    • Перечисление - новый тип, которого не было в первой редакции.
    • Стандарт заимствует из Си++ способ записи типа, в ча- стности const (A8.2).
    • Вводится запрет на модификацию строк; это значит, что их разрешает- ся размещать в памяти, доступной только на чтение (ПЗУ).
    • Изменены "обычные арифметические преобразования"; по существу,
    выполнен переход от принципа "для целых всегда превалирует unsigned;
    для плавающей точки всегда используется double" к принципу "повы- шение до минимального достаточно вместительного типа" (см. А6.5).
    • Отменены старые операторы присваивания вроде =+. Каждый оператор присваивания теперь представляется одной отдельной лексемой. В пер- вом издании оператор присваивания мог изображаться парой симво- лов, возможно, разделенных символами-разделителями.
    • Компиляторам более не разрешается трактовать математическую ассо- циативность операторов как вычислительную ассоциативность.
    • Введен унарный оператор + для симметрии с унарным -.
    • Разрешено использовать указатель на функцию в качестве ее имену- ющего выражения без явного оператора * (см.
    • Структурами разрешено при присваиваниях, можно пере- давать структуры в качестве аргументов функциям и получать их в ка- честве результата от функций.
    • Разрешено применять оператор получения адреса & к массиву; резуль- татом является указатель на массив.

    336 Приложение С
    • В первой редакции результат операции sizeof имел тип во многих реализациях он заменен на unsigned. Стандарт официально объявляет его зависимым от но требует, чтобы он был определен в заголовочном файле h> под именем size_t. Аналогичное из- менение было сделано в отношении типа разности указателей, который теперь выступает под именем f_t (см. А7.4.8 и А7.7).
    • Запрещено применять оператор получения адреса & к объекту типа даже тогда, когда данный компилятор не располагает его на ре- гистре.
    • Типом результата операции сдвига является тип ее левого операнда; тип правого операнда на повышение типа результата влияния не оказывает
    (см. А7.8).
    • Стандарт разрешает адресоваться с помощью указателей на место, ле- жащее сразу за последним элементом массива, и позволяет оперировать с такими указателями, как с обычными, см. А7.7.
    Стандарт вводит (заимствованный из Си++) способ записи прототипа функции с включением в него типов параметров и явного указания о воз- можности их изменения и формализует метод работы с переменным списком аргументов. (См. А7.3.2, А8.6.3, В7.) С некоторыми ограниче- ниями доступен и старый способ записи.
    Стандартом запрещены пустые объявления, т. е. такие, в которых нет объявителей и не объявляется ни одной структуры, объединения или перечисления. Однако объявление с одним тегом структуры (или объе- динения) переобъявит ее даже в том случае, если она была объявлена во внешней области действия.
    Запрещены объявления внешних данных, не имеющие спецификато- ров и
    (т. е. объявления с одним "голым" объявителем).
    В некоторых реализациях, когда расположено во внутреннем блоке, его область видимости распространяется на ос- тальную часть файла. Стандарт вносит ясность в эту ситуацию и объяв- ляет, что область видимости такого объявления ограничена блоком.
    Область видимости параметров "вставляется" в составную инструкцию,
    представляющую собой тело функции, так что объявления на верхнем уровне функции не могут их "затенить".

    Перечень изменений 337
    • Несколько изменены именные пространства идентификаторов. Всем те- гам структур, объединений и перечислений стандарт выделяет одно имен- ное пространство; для меток инструкций вводится отдельное именное пространство (см. АИЛ). Кроме того, имена элементов связаны со струк- турой или объединением, частью которого они являются.
    некоторых пор это общепринятая практика.)
    • Допускается инициализация объединения; инициализатор относится к первому элементу объединения.
    Разрешается инициализация автоматических структур, объединений и массивов, хотя и с некоторыми ограничениями.
    • Разрешается инициализация массива символов с помощью строкового литерала по точному количеству указанных символов (без
    • Управляющее выражение и case-метки в switch могут иметь любой цело- численный тип.

    Предметный указатель
    константа восьмеричная 57, 243
    константа
    57,243
    многоточие
    >= оператор больше или равно
    > оператор больше чем
    - оператор вычитания
    — оператор декремента
    / оператор деления
    % оператор деления по модулю 61, 261
    . оператор доступа к элементу структуры
    -> оператор доступа к элементу структуры через указатель
    , оператор запятая
    ++ оператор инкремента
    » оператор косвенного доступа 125,
    259
    && оператор логического И 37, 62,
    71,264
    оператор логического ИЛИ 37, 62,
    71,265
    ! оператор логического отрицания
    <= оператор меньше или равно
    < оператор меньше чем 62, 263
    != оператор неравенства
    & оператор побитового И 70, 264
    I оператор побитового ИЛИ 70, 264
    оператор побитового исключающего
    ИЛИ 70, 264

    оператор побитового отрицания 71,
    260
    & оператор получения адреса 125, 259
    оператор препроцессора оператор препроцессора 121,
    296-298
    = оператор присваивания 31-32,
    265-266
    += оператор присваивания 72
    == оператор равенства оператор сдвига влево сдвига вправо
    + оператор сложения 61,
    * оператор умножения 61-62, 261
    - оператор унарный минус 259
    + оператор унарный плюс 259
    символ двойная кавычка
    58,
    ' символ кавычка
    \0 символ нулевой 48, 58, 244
    \\ символ обратная наклонная черта
    20,57
    символ подчеркивания
    309
    условное выражение 74, 265
    аргументы командной строки
    150-155
    бесконечный цикл
    ; ) 84, 120
    библиотечная функция 20, 96, 108,
    309

    Предметный указатель
    339
    abort 325
    abs 326
    acos 322 330
    asin 322
    atari, atan2
    atof 323
    atoi 323 324 325 324
    ceil 323
    clearerr 319
    clock 329
    cos
    215, 322
    cosh 323 330 329 326
    exit
    325 323
    close 208,
    ferror 319
    flush fgetc 317
    fgetpos 318
    filecopy 209 323 323 206, 310
    fprintf 207, 312
    read 318 325
    f reopen 311
    fscanf 207, 314 318
    fsetpos 318 317
    getenv 325 317 330 319
    iscntrl 319 319
    isgraph 319 319
    isprint 319
    ispunct 319 320 320
    isxdigit 320
    labs 326 323 330
    log,
    323 328 322 322 322 322 322 329 323
    perror 319 323
    printf 313 317
    qsort 326
    raise 328
    rand 324
    remove rename rewind 318
    scanf
    327

    340
    Предметный указатель signal 328
    sin 215,322
    sprintf srand 324
    sscanf 315
    strchr 213, 321 321 321
    strcspn 321
    strerror 321 330 321 321 321
    strtol 324
    system 325
    tan 322
    tanh 323
    time 329
    tolower 213, 320 320
    vfprintf 222,
    vprintf 222, 313
    vsprintf 222, 313
    бинарное дерево 197
    бинарный поток 205,
    битовое поле выравнивание объявление 192, 273
    биты, образцы манипулиро- вания блок см. также составная инструкция структура инициализация в
    буферизация см.
    буферизованный getchar 219
    быстрая сортировка
    В
    ввод без буферизации 218
    возврат символа на 107
    с буферизацией 218
    с клавиатуры
    217
    форматный см. scanf ввод-вывод символов ошибки перенаправление с терминала 30
    високосный год, вычисление вывод на экран
    217
    перенаправление 195
    форматный см. printf вызов по значению по указателю 45
    выравнивание битового поля 132
    с помощью union 236
    ограничения по выражение 254-267
    в скобках 255
    константное логическое, численное значе- ние 65
    очередность вычисления 75, 254
    первичное 255
    присваивания
    266
    выражение-инструкция
    285
    порядок 37, 71,
    вычитание из указателя 136, 177-178,
    252

    Предметный указатель
    341
    грамматический разбор методом
    , рекурсивного спуска граничные условия деление целых дерево бинарное 179
    разбора 161
    дескриптор файла 216
    длина имени переменной 242
    строки 59
    единица трансляции завершение программы загадочные числа 29
    знак, размножение
    И
    идентификатор 242
    имени затенение имен пространство 292
    именующее выражение функции 256
    имя 242
    индекс отрицательный 132
    индексирование массива 39, 130,
    256,277-278
    и указатели инициализатор инициализация в
    двумерных массивов 146, 282
    массива массивов структур 172-173
    объединения 281
    переменных автоматических внешних статических по умолчанию
    280
    строковой константой структуры указателя 134
    инструкции 284-289
    выбора 286
    перехода 288
    присваивания вложенные
    74
    последовательность выполне- ния 285-286
    инструкция окончание помеченная 285
    пустая исключительные ситуации
    К
    типа ключевые слова 242-243
    командная строка аргументов 150-155
    комментарий компиляция нескольких файлов 97
    раздельная
    Си-программ конец файла см. EOF
    конкатенация лексем строк константа восьмеричная 0... 57, 243
    из расширенного набора 245
    перечисления
    275
    символьная 35, 57, 244-245
    с плавающей точкой 26, 56-57, 245
    строковая
    245-246
    суффикс 56, 243
    тип
    О х . . . 57, 243

    342
    Предметный указатель константное выражение 58, 82, 122,
    267
    Л
    лексема конкатенация подстановка 295
    лексика, соглашения лексикографическая сортировка лексическая область видимости
    292-293
    литерал строковый
    см. константа строковая макро-процессор
    см. также препроцессор макрос расширение 296
    с
    120 225
    getc 225 225
    массив анеуказатель двумерный 145-148,282
    имя в роли аргумента индексирование в
    256
    многомерный объявитель 277
    объявление
    277
    порядок элементов в памяти
    277-278
    преобразование имени
    254-255
    размер по умолчанию символов ссылки на элементы 256
    структур инициализация 171-173
    указателей масштабирование целых в арифме- тике с указателями
    262
    метка область видимости
    285, 293 82, 285
    default 82, 285
    многопутевое ветвление многоточие множественное присваивание 37
    модульность
    142
    небуферизованный
    219
    незавершенный тип 272
    неоднозначность
    79, 286,
    301-302
    неправильная арифметика с указа- телями несоответствие типов объявлений
    99-100
    нотация синтаксиса 246
    нуль, опущенная проверка на нуль область видимости 246, 292
    автоматических переменных 109,
    293
    внешних объектов лексическая 292
    меток правила определения 109, 292
    обобщенный указатель см. void *,
    указатель обратная польская запись 102
    объединение, тег 271-272
    объект объявитель 275-279
    абстрактный 283
    массива 277
    функции 278
    объявление
    268-284
    а не определение 52,

    Предметный указатель
    343
    битового поля 192, 271
    внешнее 289,291
    внешней переменной класса памяти 268
    массива структуры типа 276
    указателя функции 278
    неявное
    256
    новым способом 257
    старым способом typedef 187, 268, 283
    оператор
    > 62,263
    больше или равно >=
    вычитания- 61,261-262
    деления/
    деления по модулю %
    доступа к элементу структуры через указатель ->
    запятая ,
    инкремента ++
    косвенного доступа *
    логический отрицания !
    логического И
    ИЛИ
    265
    <
    меньше или равно <=
    неравенства ! = 31,
    побитового отрицания
    280
    получения адреса &
    приведения к типу
    252,260-261,283
    присваивания =
    присваивания
    72
    равенства 34-35, 62, 263
    сдвига влево сдвига вправо
    70, 262
    сложения +
    умножения *
    унарного минуса - 259
    унарного плюса + 259
    sizeof
    260
    операторы аддитивные 261
    арифметические 61
    ассоциативность мультипликативные 261
    отношения побитовые присваивания равенства операции над объединениями 190
    указателями определение аргумента внешней переменной макроса 295
    памяти 268
    параметра пробное удаление см. tfundef функции опущенный спецификатор класса памяти 269
    типа 270
    отбрасывание значения с плавающей точкой 66,
    250
    при делении
    261
    отрицательные индексы 132
    отступы в тексте программы 23, 34,
    40,80
    П
    память автоматическая класс 247
    объявление класса 269
    определение 269
    распределитель 182, 235-240
    резервирование 269
    спецификатор класса 268

    1   ...   20   21   22   23   24   25   26   27   28


    написать администратору сайта