Читать «C++: базовый курс» онлайн - страница 332
Herbert Schildt
Как директива
#include <iostream>
using namespace std;
#define TOM
int main()
{
#ifdef TOM
cout << "Программист Том.\n";
#else
cout << "Программист неизвестен.\n";
#endif
#ifndef RALPH
cout << "Имя RALPH не определено.\n";
#endif
return 0;
}
При выполнении эта программа отображает следующее.
Программист Том.
Имя RALPH не определено.
Но если бы идентификатор
Программист неизвестен.
Имя RALPH не определено.
И еще. Директивы
Директива
#undef макроимя
Рассмотрим пример.
#define TIMEOUT 100
#define WAIT 0
// . . .
#undef TIMEOUT
#undef WAIT
Здесь имена
Основное назначение директивы
Помимо директивы
#if defined MYFILE
или
#ifdef MYFILE
При необходимости, чтобы реверсировать условие проверки, можно предварить оператор
#if !defined DEBUG
cout << "Окончательная версия!\n";
#endif
О роли препроцессора
Препроцессор C++ — прямой потомок препроцессора языка С, причем без каких-либо усовершенствований. Однако его роль в C++ намного меньше роли, которую играет препроцессор в С. Дело в том, что многие задачи, выполняемые препроцессором в С, реализованы в C++ в виде элементов языка. Страуструп тем самым выразил свое намерение сделать функции препроцессора ненужными, чтобы в конце концов от него можно было бы совсем освободить язык.
На данном этапе препроцессор уже частично избыточен. Например, два наиболее употребительных свойства директивы
Приведем еще один пример замены элементов препроцессора элементами языка. Он связан с использованием однострочного комментария. Одна из причин его создания — разрешить "превращение" кода в комментарий. Как вы знаете, комментарий, использующий