using namespace std;
#line 200 // Устанавливаем счетчик строк равным 200.
int main() // Эта строка сейчас имеет номер 200.
{// Номер этой строки равен 201.
cout << _ _LINE_ _;// Здесь выводится номер 202.
return 0;
}
Директива #pragma Директива #pragma зависит от конкретной реализации компилятора.
Работа директивы #pragma
зависит от конкретной реализации компилятора. Она позволяет выдавать компилятору различные инструкции, предусмотренные создателем компилятора. Общий формат его использования таков.#pragma имя
Здесь элемент имя
представляет имя желаемой #pragma-инструкции. Если указанное имя не распознается компилятором, директива #pragma попросту игнорируется без сообщения об ошибке.Важно!
Для получения подробной информации о возможных вариантах использования директивы #pragma стоит обратиться к системной документации по используемому вами компилятору. Вы можете найти для себя очень полезную информацию. Обычно #pragma-инструкции позволяют определить, какие предупреждающие сообщения выдает компилятор, как генерируется код и какие библиотеки компонуются с вашими программами.Операторы препроцессора "#" и "##" В C++ предусмотрена поддержка двух операторов препроцессора: "#"
и "##". Эти операторы используются совместно с директивой #define. Оператор "#" преобразует следующий за ним аргумент в строку, заключенную в кавычки. Рассмотрим, например, следующую программу.#include
using namespace std;
#define mkstr(s) # s
int main()
{
cout << mkstr(Я в восторге от C++);
return 0;
}
Препроцессор C++ преобразует строку
cout << mkstr(Я в восторге от C++);
в строку
cout << "Я в восторге от C++";
Оператор используется для конкатенации двух лексем. Рассмотрим пример.
#include
using namespace std;
#define concat(a, b) a ## b
int main()
{
int xy = 10;
cout << concat(x, y);
return 0;
}
Препроцессор преобразует строку
cout << concat (x, y);
в строку
cout << xy;
Если эти операторы вам кажутся странными, помните, что они не являются операторами "повседневного спроса" и редко используются в программах. Их основное назначение — позволить препроцессору обрабатывать некоторые специальные ситуации.
Зарезервированные макроимена В языке C++ определено шесть встроенных макроимен.
_ _LINE_ _
_ _FILE_ _
_ _DATE_ _
_ _TIME_ _
_ _STDC_ _
_ _cplusplus
Рассмотрим каждое из них в отдельности.
Макросы _ _LINE_ _
и _ _FILE_ _ описаны при рассмотрении директивы #line выше в этой главе. Они содержат номер текущей строки и имя файла компилируемой программы.Макрос _ _DATE_ _
представляет собой строку в формате месяц/день/год, которая означает дату трансляции исходного файла в объектный код.Время трансляции исходного файла в объектный код содержится в виде строки в макросе _ _TIME_ _
. Формат этой строки следующий: часы.минуты.секунды.Точное назначение макроса _ _STDC_ _
зависит от конкретной реализации компилятора. Как правило, если макрос _ _STDC_ _ определен, то компилятор примет только стандартный С/С++-код, который не содержит никаких нестандартных расширений.Компилятор, соответствующий ANSI/ISO-стандарту C++, определяет макрос _ _cplusplus
как значение, содержащее по крайней мере шесть цифр. "Нестандартные" компиляторы должны использовать значение, содержащее пять (или даже меньше) цифр.Мысли "под занавес"