11.8  Предопределенные макросы

Язык С/C++ предопределяет глобальные идентификаторы. За исключением  __cplusplus и _Windows, каждое из них и начинается, и заканчивается  двумя символами подчеркивания (__). Эти макросы также называют явными константами. Рассмотрим их более подробно.

Макрос __BCPLUSPLUS__ только определяет компиляцию для языка С++. Если выбран компилятор языка С++, то макрос определен как шестнадцатеричная константа 0х0300.

Макрос __BORLANDC__ определен как шестнадцатеричная константа 0х0400.

Макрос __CDECL__ сообщает о том, что флаг -p не использован (триггеpная кнопка в диалоговом окне Entry/Exit Code Generation). Он  устанавливается равным целочисленной константе 1, если -p не использовался; в противном случае он не определен.

Макрос __cplusplus определен как 1, если используется язык С++, в противном случае он не определен. Он позволяет написать модуль, который в некоторых случаях будет компилироваться в языке С, а в некоторых случаях – в языке С++. Использование условных директив компиляции позволяет управлять, какие части программы для языков С и С++ будут включены в компиляцию.

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

mmmddyyyy,

где mmm – это месяц (Jan, Feb и т.д.); dd – число месяца (от 1 до 31, причем если это число меньше 10, то первый символ d равен пробелу);  yyyy – год (2001, 2010 и т.д.).

Макрос __DLL__ определен как 1, если компилируется модуль с опцией -WD командной строки или используется триггерная кнопка Windows DLL All Functions Exportable (O|C|C|Entry/Exit Code) генерации кода для Windows DLL; в других случаях он не определен.

Макрос __FILE__дает имя текущего обрабатываемого препроцессором исходного файла (в виде строкового литерала). Когда препроцессор обрабатывает директиву #include или #line данный макрос соответствующим образом меняет свое значение.

Макрос __LINE__ дает количество обработанных препроцессором к данному моменту строк текущего исходного файла (как десятичная константа). Обычно первая строка исходного файла определяется с номером 1, хотя на это может повлиять директива #line..

Макрос __MSDOS__ дает целочисленную константу 1 для всех случаев компиляции.

Макрос __OVERLAY__ специфичен для семейства компиляторов Borland C и С++. Он предопределен равным 1, если модуль компилируется с опцией -Y (включена поддержка оверлейных структур). Если оверлейные структуры не поддерживаются, то данный макрос не определен.

Макрос __PASCAL__ сообщает о том, что был использован флаг -p или был  использован вызов соглашений Pascal (O|C|C|Exit/Entry). Макрос установлен равным целочисленной константе 1, если флаг -p использовался; в противном случае он не определен.

Макрос __STDC__ определен равным константе 1, если компиляция выполняется при установленном флаге совместимости с ANSI (-A или триггеpная кнопка ANSI Source Option); в противном случае макрос не определен.

Макрос __TEMPLATES__ специфичен для семейства компиляторов Borland C и С++. Он определен как 1 для С++ файлов (значения в случаях, когда Borland C++ поддерживает шаблоны); в других случаях он не определен.

Макрос __TIME__ дает время начала обработки препроцессором текущего исходного файла (в виде строкового литерала). Как и в случае макроса __DATE__, каждое включение __TIME__ будет содержать одно и то же значение, независимо от того, сколько времени продолжалась обработка файла. Он имеет формат:

hh:vv:ss,

где hh –часы (от 00 до 23); mm –минуты (от 00 до 59); ss –секунды (от 00 до 59).

Макрос __TURBOC__ специфичен для семейства компиляторов Borland C и С++. Он определен как шестнадцатеричная константа, равная 0х0400.