Язык программирования C

Скачать в pdf «Язык программирования C»
А. 11.2. Связывание


В пределах одной единицы трансляции все объявления одного и того же идентификатора с внутренним связыванием относятся к одному и тому же объекту или функции, причем этот объект уникален для данной единицы трансляции. В случае внешнего связывания все объявления одного и того же идентификатора относятся к одному и тому же объекту, но уже в пределах всей программы.


Как говорилось в разделе А. 10.2, если первое внешнее объявление идентификатора имеет спецификатор static, оно дает идентификатору внутреннее связывание, а если такого спецификатора нет, то внешнее. Если объявление находится внутри блока и не содержит extern, то соответствующий идентификатор не имеет связывания и уникален для данной функции. Если объявление содержит extern и блок находится в области действия внешнего объявления этого идентификатора, то последний имеет тот же способ связывания, что и во внешнем объявлении, и относится к тому же объекту (функции). Однако если ни одного внешнего объявления для этого идентификатора нет, то его способ связывания — внешний.

А. 12. Препроцессор


Препроцессор языка С выполняет макроподстановку, условную компиляцию и включение именованных файлов. Строки, начинающиеся со знака # (перед которым разрешены символы пустого пространства), задают препроцессору инструкции-директивы. Их синтаксис не зависит от остальной части языка; они могут фигурировать где угодно и оказывать влияние (независимо от области действия) вплоть до конца единицы трансляции. Границы строк принимаются во внимание: каждая строка анализируется отдельно (но есть и возможность сцеплять строки; подробнее об этом в разделе А. 12.2). Лексемами для препроцессора являются все лексемы языка и последовательности символов, задающие имена файлов, как, например, в директиве #include (раздел А. 12.4). Кроме того, любой символ, не определенный каким-либо другим способом, также воспринимается как лексема. Влияние символов пустого пространства, отличающихся от пробелов и горизонтальных табуляций, внутри строк препроцессора не определено.

Скачать в pdf «Язык программирования C»