Язык программирования C++. Вводный курс


Директивы препроцессора - часть 2


Другим распространенным примером применения условных директив препроцессора является включение в текст программы отладочной информации. Например:

int main()

{

#ifdef DEBUG

  cout << "Начало выполнения main()\n";

#endif

 

  string word;

  vector<string> text;

 

  while ( cin >> word )

  {

#ifdef DEBUG

    cout << "Прочитано слово: " << word << "\n";

#endif

    text.push_back(word);

  }

  // ...

}

Если константа DEBUG не определена, результирующий текст программы будет выглядеть так:

int main()

{

 

  string word;

  vector<string> text;

 

  while ( cin >> word )

  {

    text.push_back(word);

  }

  // ...

}

В противном случае мы получим:

int main()

{

  cout << "Начало выполнения main()\n";

 

  string word;

  vector<string> text;

 

  while ( cin >> word )

  {

    cout << "Прочитано слово: " << word << "\n";

    text.push_back(word);

  }

  // ...

}

Константа препроцессора может быть определена в командной строке при вызове компилятора с помощью опции -D (в различных реализациях эта опция может называться по-разному). Для UNIX-систем вызов компилятора с определением препроцессорной константы DEBUG

выглядит следующим образом:

$ CC -DDEBUG main.C

Есть константы, которые автоматически определяются компилятором. Например, мы можем узнать, компилируем ли мы С++ или С программу. Для С++ программы автоматически определяется константа __cplusplus

(два подчеркивания). Для стандартного С определяется __STDC__. Естественно, обе константы не могут быть определены одновременно. Пример:

#idfef __cplusplus

  // компиляция С++ программы

  extern "C";

  // extern "C" объясняется в главе 7

#endif

 

int main(int,int);

Другими полезными предопределенными константами (в данном случае лучше сказать переменными) препроцессора являются __LINE__ и __FILE__. Переменная __LINE__




Начало  Назад  Вперед



Книжный магазин