Cтраница 3
При составлении программы может случиться так, что одним и тем же идентификатором в программе обозначены разные величины, причем она из них описана во внешнем блоке, а другая - во внутреннем. Значение глобальной величины не утрачивается, но во время выполнения подблока данный идентификатор относится к локализованной величине. [31]
Если в программе одним и тем же идентификатором обозначены разные величины, причем одна из них описана во внешнем блоке, а другая - ва внутреннем, то глобальная величина становится недействительной во время выполнения подблока, где описана величина с тем же наименованием. Зна-чение глобальной величины не утрачивается, но во время выполнения подблока данный идентификатор относится к локализованной величине. [32]
Для любого вхождения идентификатора в программу ( так называется появление идентификатора в каком-либо месте программы) его роль в этом месте может быть установлена следующим образом. Выбирается самый внутренний из всех блоков, охватывающих это вхождение, в которых локализован данный идентификатор. Если таких блоков нет, то этот идентификатор может быть только идентификатором, закрепленным за некоторым стандартным объектом ( см. стр. В противном случае идентификатор в рассматриваемом вхождении представляет тот же объект, что в выбранном блоке. [33]
Согласно этому синтаксическому определению меткой оператора может служить любой идентификатор. Если надо назвать оператор некоторым именем ( идентификатором), то пишем перед этим оператором данный идентификатор и отделяем его от оператора двоеточием. Такой оператор называется помеченным. [34]
Согласно этому синтаксическому определению, меткой оператора может служить любой идентификатор. Если мы хотим назвать оператор некоторым именем ( идентификатором), то пишем перед этим оператором данный идентификатор и отделяем его от оператора двоеточием. [35]
Наконец, как вы могли предвидеть, имеется контекстное условие ( см. 1.2.1), которое устанавливает, что каждое использующее вхождение должно идентифицировать одно и только одно определяющее вхождение [ С. Таким образом, все используемые вами переменные должны быть описаны ( как в Алголе 60, но не как в Фортране), и любой данный идентификатор может быть описан в пределах одной зоны только один раз. Однако использующее вхождение не обязательно должно идти после его определяющего вхождения. [36]
Наконец, как вы могли предвидеть, имеется контекстное условие ( см. 1.2.1), которое устанавливает, что каждое использующее вхождение должно идентифицировать одно и только одно определяющее вхождение [ С. Таким образом, все используемые вами переменные должны быть описаны ( как в Алголе 60, но не как в Фортране), и любой данный идентификатор может быть описан в пределах одной зоны только один раз. Однако использующее вхождение не обязательно должно идти после его определяющего вхождения. [37]
В листинге 12.2 флаг found используется для определения, был ли найден PID. Можно ли не сохранять флаг found в цикле, а просто проверять значение переменной р в конце цикла, чтобы определить, был ли найден процесс с данным идентификатором. [38]
Областью действия описания является блок, в начале которого описание помещается. Таким образом, с помощью описаний указывается, что та или иная величина существует или определена только внутри данного блока и в этой, области она обозначается данным идентификатором. Вне блока описанная в нем величина не определена, а идентификатор, которым она была обозначена, может быть использован для наименования любой другой величины. Идентификаторы, описанные в данном блоке, так и называются - локализованными. В начале блока один и тот же идентификатор может быть описан только один раз. [39]
В листинге 12.2 флат found используется для определения, был ли найден PID. Можно ли не сохранять флат found в цикле, а просто проверять значение переменной р в конце цикла, чтобы определить, был ли найден процесс с данным идентификатором. [40]
Областью действия описания является блок, в начале которого описание помещается. Таким образом, с помощью описаний указывается, что та или иная величина существует ( или определена) только внутри данного блока и в этой области она обозначается данным идентификатором. [41]
Ряд идентификаторов в виде последовательностей букв, являющихся словами английского происхождения, используется для обозначения объектов языка, называемых операторам описателями, дополнениями, ситуациями прерывания, встроенными функциями. Это служебные или ключевые слова, которые, однако, могут быть употреблены в любом другом смысле, например в качестве имен переменных. В таком случае истинный смысл данного идентификатора определяется транслятором контекстуально. LT, GT и др., а также ключевые слова могут быть использованы только в этом специальном смысле. [42]
Язык С поддерживает четыре класса памяти, обозначаемые спецификаторами класса памяти: auto, register, extern и static. Класс памяти идентификатора помогает определить его период хранения, область действия и тип компоновки. Период хранения идентификатора - это время, в течение которого данный идентификатор существует в памяти. Некоторые идентификаторы существуют короткое время, некоторые неоднократно создаются и разрушаются, другие существуют в течение всего времени выполнения программы. Область действия идентификатора характеризует возможность обращения к нему из различных частей программы. Некоторые идентификаторы доступны во всей программе, другие - только в отдельных ее частях. Эта характеристика показывает, известен ли идентификатор только в текущем исходном файле или в любом исходном файле с соответствующими объявлениями. В этом разделе рассматриваются четыре класса памяти и период хранения. В разделе 5.12 обсуждается область действия идентификаторов. В главе 14 обсуждается тип компоновки идентификатора и программирование с несколькими исходными файлами. [43]
С другой стороны, одно из основных требований, предъявляемых к алгоритмическому языку, состоит в том, чтобы запись алгоритма, сделанная на этом языке одним лицом, была понятна другим лицам, знающим этот язык, и чтобы перевод алгоритма с этого языка на язык машины мог производиться по достаточно формальным правилам. Для понимания же этой записи необходима некоторая дополнительная информация об идентификаторах, используемых в том или ином операторе. Для этого прежде всего необходимо знать, какой именно объект обозначен данным идентификатором. Кроме того, для понимания алгоритма необходима определенная информация и о самих объектах. Если, например, известно, что данным идентификатором обозначен переключатель, то из главы 9 мы знаем, что для определения значения указателя переключателя в операторе перехода необходима дополнительная информация, содержащаяся в переключательном списке описания этого переключателя. [44]
Центральная таблица устроена так, что в любой момент по время выполнения программы она содержит все активные в этот момент ассоциации идентификаторов независимо от того, локальные они или нет. Если принять, опять-таки для простоты, что множество всех идентификаторов, на которые ссылаются подпрограммы, может быть определено при трансляции, то при начальной установке центральной таблицы в нее следует включить по одному элементу для каждого идентификатора, независимо от числа подпрограмм, в которых встречается этот идентификатор. Каждый элемент таблицы содержит также флаг активности, указывающий, имеет ли данный идентификатор активную ассоциацию, и, кроме того, в элементе отведено место для указателя на объект ассоциации. [45]