Язык С


Лексическая область действия


Лексическая область действия идентификаторов, описанных во внешних определениях, простирается от определения до кон- ца исходного файла, в котором он находится. Лексическая об- ласть действия идентификаторов, являющихся формальными пара- метрами, распространяется на ту функцию, к которой они отно- сятся. Лексическая область действия идентификаторов, описан- ных в начале блока, простирается до конца этого блока. Лек- сической областью действия меток является та функция, в ко- торой они находятся. Поскольку все обращения на один и тот же внешний иденти- фикатор обращаются к одному и тому же объекту (см. П. 19.2), Компилятор проверяет все описания одного и того же внешнего идентификатора на совместимость; в действительности их об- ласть действия распространяется на весь файл, в котором они находятся. Во всех случаях, однако, есть некоторый идентификатор, явным образом описан в начале блока, включая и блок, который образует функцию, то действие любого описания этого иденти- фикатора вне блока приостанавливается до конца этого блока. Напомним также (п. 16.5), Что идентификаторы, соответст- вующие обычным переменным, с одной стороны, и идентификато- ры, соответствующие членам и ярлыкам структур и объединений, с другой стороны, формируют два непересекающихся класса, ко- торые не вступают в противоречие. Члены и ярлыки подчиняются тем же самым правилам определения областей действия, как и другие идентификаторы. Имена, специфицируемые с помощью TYPEDEF, входят в тот же класс, что и обычные идентификато- ры. Они могут быть переопределены во внутренних блоках, но во внутреннем описании тип должен быть указан явно:

TYPEDEF FLOAT DISTANCE; ... \( AUTO INT DISTANCE; ...

Во втором описании спецификатор типа INT должен присутство- вать, так как в противном случае это описание будет принято за описание без описателей с типом DISTANCE (прим. Автора: согласитесь, что лед здесь тонок.).



    Содержание раздела