Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 49 50 51 [ 52 ] 53 54 55 ... 210


derived.derived (int a) : (a+1) { ... }

derived d (10);

Конструктор базового класса вызывается для объекта d с параметром 11.

Определения внешних данных

Определения внешних данных имеют вид:

определение данных: описание

Класс памяти таких данных статический.

Если есть более одного определения внешних данных одного имени, то определения должны точно согласовываться по типу и классу памяти, и инициализаторы (если они есть), должны иметь одинаковое значение.

Командные строки компилятора

Компилятор языка C++ содержит препроцессор, способный выполнять макроподстановки, условную компиляцию и включение именованных файлов. Строки, начинающиеся с #, относятся к препроцессору. Эти строки имеют независимый от остального языка синтаксис; они могут появляться в любом месте оказывать влияние, которое распространяется (независимо от области видимости) до конца исходного файла программы.

Заметьте, что определения const и inline дают альтернативы для большинства использований #define.

Замена идентификаторов

Командная строка компилятора имеет вид:

#define идент строка символов и вызывает замену препроцессором последующих вхождений идентификатора, заданного строкой символов. Точка с запятой внутри (или в конце) строки символов является частью этой строки.

Строка:

#define идент ( идент ..... идент ) строка символов

где отсутствует пробел между первым идентификатором и скобка, является макроопределением с параметрами. Последующие



вхождения первого идентификатора с идущими за ним (, последовательностью символов, разграниченной запятыми, и ), заменяются строкой символов, заданной в определении.

Каждое местоположение идентификатора, замеченного в списке параметров определения, заменяется соответствующей строкой из вызова. Фактическими параметрами вызова являются строки символов, разделенные запятыми; однако запятые в строке, заключенной в кавычки, или в круглых скобках не являются разделителями параметров.

Число формальн1х и фактических параметров должно совпадать. Строки и символьные константы в символьной строке сканируются в поисках формальных параметров, но строки и символьные константы в остальной программе не сканируются в поисках определенных (с помощью define) идентификаторов.

В обоих случаях строка замещения еще раз сканируется в поисках других определенных идентификаторов. В обоих случаях длинное определение может быть продолжено на другой строке с помощью записи \ в конце продолжаемой строки.

Командная строка:

#undef идент

влечет отмену препроцессорного определения идентификатора.

Включение файлов

Командная строка компилятора:

#include имя файла вызывает замену этой строки полным содержимым файла имя файла. Сначала именованный фай ищется в директории первоначального исходного файла, а затем в стандартных или заданных местах.

Альтернативный вариант. Командная строка:

#include <имя файла> производит поиск только в стандартном или заданном месте, и не ищет в директории первоначального исходного файла. (То, как эти места задаются, не является частью языка.)

Включения с помощью #include могут быть вложенными.



Условная компиляция

Командная строка компилятора:

#if выражение

проверяет, является ли результатом вычисления выражения не-ноль. Выражение должно быть константным выражением. Применительно к использованию данной директивы есть дополнительные ограничения: константное выражение не может содержать sizeof ии перечислимые константы.

Кроме обтчных операций Си может использоваться унарная операция defined. В случае применения к идентификатору она дает значение не-ноль, если этот идентификатор б1 ранее определен с помощью #define и после этого не было отмены определения с помощью #undef; иначе ее значение 0.

Командная строка:

#ifdef идент

проверяет, определен ли идентификатор в препроцессоре в данный момент; то есть, был ли он объектом командной строки #define.

Командная строка:

#ifndef идент

проверяет, является ли идентификатор неопределенным в препроцессоре в данный момент.

После строки каждого из трех видов может стоять произвольное количество строк, возможно, содержащих командную строку

#else

и далее до командной строки

#endif

Если проверенное условие истинно, то все строки между #else и #endif игнорируются. Если проверенное условие ложно, то все строки между проверкой и #else или, в случае отсутствия #else, #endif, игнорируются.

Эти конструкции могут быть вложенными.

Управление строкой

Для помощи другим препроцессорам, генерирующим программы на Cи.



1 ... 49 50 51 [ 52 ] 53 54 55 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика