|
Программирование >> Перегруженные имена функций и идентификаторы
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и.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |