Язык С/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.