Искусство программирования на Си (984073), страница 85
Текст из файла (страница 85)
Эти Функции работают так >'е* идснтиб>икаторов и строк(в основном касаюшаяс» симленный тип длиной не менее 32 бита". Теперь это де- спаг баСа с аг баха(1> как и функции семейства асапГ, но в качестве артуа>ен волов национальныл языков и лру>их символов) явля- лает сам компилятор. Быстрые типы и типы с ограни- 1! та принимают одно значение гв 1(ат, а нс перел>еннос чснисм минимальной длины введены для того, чтобы При этом размер структуры будет определяться так, к л честно аргучснтов. Эти Функции присутствовали Примерно в 1995 г.
поправка 1 (которая в стандарте дать возможность программистам, которые не предъявкак сели бы последний элемент отсутствовал. Однако ряде библиотек С, поэтому вы уже могли ими называется АМО1) официально включила в сушесгвуюляют таких жестких требований, использовать типы, если вы выделите дополнительн>ю память, ее можно пользоваться ший стандарт С "широкие" символы, диграфы и альтсркоторыс удовлетворят их потребности, нс полагаясь на популярный 8-бп>голый баит. будет использовать через этот последний элемент. Семейство функций рппи получило несколько но нативныс варианты написания отдельных операторов.
вых спецификаторов форматов (включая %а и %А лля Введение "широкил" символоя является попыткои ПГ>аизводныв типы Новые свойства стандартной библиотеки шестналцатнришых констант с плаваюшей точкой). сдслатьразличис междуминимачьным доступным объсВ С99 Спецификатор %1Г теперь является сшюнимоч специ- мом памяти (сваг) и содержимым набора сил>волов (ко- В стандарте С99 появилось трп новых объявления, свя- 9 значительно возрос объем стандартной библиофикатора %Г, поскольку это рекомендовано во многих то ый может быть гораздо больше). занных с массивами. массив переменной ин, . с- теки.
Вам будет интеРесно просмотйеть Разлсл стацдарторы' ст >, ср книгах по С Новые спецификаторы появились и у фун >>лыс натпвныс ваоианзы написания о>лсльныл монны. ч. сны структу и несколько пои ! Ун - чь- та, касающийся станлар™Ой Г>иблиотски, илп докумснкции в!глине. опе ато ов будут доступны, сели включить в програмных способов преобразования элементов "массива" в тешию по компилятору, когда она стянет доступной б >сВ, ц Это далеко не полный псРсчснь новых осо еннос- м з! головочный файл <Гаоб4б.й>, что позволит, нафункции.
и вален целыи Рпд ц>Ункций длЯ Работы с типами с пла- НП Йиззвляиязезвиые вивыииеевиериздезы В, д аду С99 Взгляде фдузиее' С Часть!П Глава 29 несколько символов а именах янсшних идентификато- а лкзбом месте. г е ь с е. где ьюжно разместить оператор, можно В некозорых системах функция ае1ес(изменяетсаой ли использовать зо!а6)е а (урез)еЕ а далее объявлять роя. Четыре цзестнадцатиричные цифры считаются как азмсстить и объяален р' ' бъяаление. (Единственным исключени- последний аргулзснт на время, оставшееся до заяершс- обьект то1ай)е определенного типа.
Поэтому спсцифишесть символов, а аоссмь шестнадцатиричных цифр — ем ягшяется то, по опс ат р фр — ., о операторы могут иметь перед собой ния паузы. Приведенный код будет работать в любом катары типа теперь можно д>блирояатзк использояание как 1О символов. (Или, по крайней мере, могут таковы- метки, а объяялсния — н т.) К ми счит ъ аления — нет.) Кроме того, переменная р,. Ут - . , ъ аления — н т.) К .
. . сл> пи , хо я и не всегда б»дст давать время ло заясршс- третьего и большего количества спецификатороя не окааться. Некоторые реализации более эффектна- может быть объявлена (и, если нужно, иницнализ иро- ния паузы. зыяает никакого ехрфскта. ны.) В будущих веронал стандарта универсальные сим- вана) я пе аой ст ) раой строке оператора Гог. В этом случае об- Это свойство становится ешс более мощным при И наконец, ключсяое слово зцабс в С99 получило волы будут всегда считаться одним символом.
пасть видилюсти пе емс о ременной ограничивается телом использоаании его совместно с вылелснными инициа- ешс одно значение. Если параметр функции является Синтаксис препроцессора цикла. Нап пмс: Р Р: лизаторами, которые будут рассмотрены далее. массивом, то размер массива может иметь специфика- ЕОГ (1аь 1=1З 1<ызаг ++Х) ( В стандарте С99 также вяодится концепция ограни торы типа Если один из них — спецификаториапс то Прспроцсссор также получил несколько новых нсболь- рг1аег("Простой араяер. 11зае ЪП)(п , х); ченных указателеи" (гсигк(сб рози(сгь).
з от, кзо помнит любой передаваемый функции указатель должен указыших функций. Одна пз наиболее желаемых — возмож- — ож- ) прсдшестяуюазий стандарт, с ужасом подумает о специ- вать на массив с количеством злсмснтоа нс меньше уканость задания макросов персмсннои длины. В С99 мак- О эяысь аерыыыиыая х рые ыа оарыделаыа фпкаторе поайаа, который ястречююя в проекте преды- занного. Например, рос переменной длины выглядит примерно следующим образом: Составные литералы являются ярслзенными объяя- дущста Стаидарта. ОлиаКО ГЕЯ(ГУС( ПО-С>шсетВУ ОтЛИЧа- .л Е Е Е Е 1О1) .
тоье( Еоо (л.аа а (асаа1с 1 пениями. В С99 для создания (и даже для инициачиза- стся от поа11аа. йде11ае РЕВЯ(гогазас, ...) Гргьаса(вьезезыгг, цпи) объекта уже не нужно объяялять переменную. Основное назначение ограниченных указазслсй — объявляет функци, р ' .рги п " — . ункцию, пе выи а гумент которой — это о гагзиаа, чд Япоа ) Можно просзо поставить имя типа перед списком, зак- обсспечение дополнительной информации для камни указатель, по меньшей .зоре, р списком зак- .. " з т ь, по меньшей мс е, на 1О значений типа !и( Это теперь исключит наиболес часто ветре асм " лючснным а скобки.
Это выглядит как преобразование лятороа о потенциальном совмещении имен, что позао- Это нс был бы попый стандарт С, сели бы он нс прцда- типов, котя и отличается от прсобразоаания типов по зяст компиляторам более эффсктззвно оптимизирояазь Новый язык пмсст новую форму ргайша, к т дя сапой с>ти. зэк, например, если есть обьявлсние прозраммы. Если при определении функции вы счита Ий Цоно,з нияз из иные из о на из ингения разделы Взозяд и дудуизое. <"99 ВВ8фф 1 Часть й! — Глава 29 ЙЯИ Эгп свойства можно также использовать совместно предполагается, что переменные без объявления типа дартс С89 имели нежелательный скрытыи смысл или дет сюрпризом для людей, которые нс знали, что прос составными литералами. Наприл(ер, в предыдущем имеют тип !и(, бул>т ошибочными.
Неявное объявление неточно выражали смысл, который в них закладывал- етое гчишыииние неопределенного значения может вызпримсре (с использованием зе]ес() можно написать. все сше допустимо в стандарте С89, но многие компи- ся. В некоторых случаях в стандарте С99 рассмотрены вать разгрузку оперативной памяти и другие нсприятаа1еее(0, О, О, О, а((асхасс ляторы уже выдают предупреждения о таком объявлс- граничные условия, которые не были рассмотрены в ности.
Нсобращайтсськнеинициализированной памяти— Е1веиа1) (. Си ввел=в*1000]) ] з нии. Если вы иногда грен(иге неявным объявлением, то стандарте С89. Например, теперь, сели функция и вы будете иметь меньше проблем. настат час расплаты. Это также означает, что з(анс 1; (тпраапз нс может сгенерировать подходящее имя, то она Если пш]п объявлена с типом возвращаемого значеТеперь можно ставить запятую в конце списка знабольше нс будет соответствовать объявлению з(а(!с (и( возврюцаст указатель ]Ч]зЕЕ. Ранее это было возможно ния зя( (как н должно быть в переносимом кодс), то чсний типа епвш. Это позволит >просюыь написанис > " 1;, теперь это будет синтаксической ошибкой.
только после ТМР МАХ вызовов функции (шрпаш. завершение ша1п без возврата значения эквивалентно вашими программами др>гих программ и удовлстворяТспсрь нельзя возвращать значение из функции, Правила совмещения имен были в значительной мере возвращению значения О.
Многие нсаккуратныс прост общему правилу, которое во многих случаях птедусобъявленной как чоы, или не возвращать значение из переработаны. граммисты привыкли возвращать сл>чайпыс значения. матривает использование дополнительных запятых в функции, имеющей тип, отличный от то!0. В стандарте С99 изменены определения "зависюцс- Теперь этот недостаток устранен. конце списка. Описание ша1п теперь более четко указывает, что го от реюшзации", "неустановленного" и "нсопредслен- Стандарт четко указал, что только приведенные в д ругие новые свойства тпп 1п! возвращаемого значения оГ>язатслсн. Члены ко- ного" поведения.
Границы между ними были несколь- стандарте точные строки режимов (для Горел) имеют мите за ранее считали, что это было достаточно очевид- ко перенесены и установлены более четко. Это нс опрсдсленныс значения. Некоторым программно)ах( Каждая ф>нкция имеет неявную переменную (впс, но, но широкое использование в книгах по С чо(0 должно оказать никакого влияния на работу большин- могло показаться, что текст стандарта С89 предполагакоторая представляет собой строку, содержащую имя ша)п(то!Й) показало.
что существующее описание недо- ства программ, несмотря на внесенные изменения. На- ет, что за строкой режима мог следовать дополнитсльфункции. Это свойство поддерживается целым рядом статочно четко определяет тпп ша!и. Некоторыс реали- пример, теперь в стандарте полностью оговорено уело- ный текст (особенно это касается записи 'г(", иногда компиляторов (латя конкретное сзо написание может зации до сих пор позволяют использовать помимо двух вие деления отрицательных целых чисел с тем, чтобы встречающегося в книгах в качестве обозначения "текразличаться).