Стандарт ANSI С имеет 5 предопределенных макросов:
__LINE__
__FILE__
__DATE__
__TIME__
__STDC__
Borland С++ также определяет дополнительные макросы:
__ВСОРТ__
__BCPLUSPLUS__
__BORLANDC__
__CDECL__
__CHAR_UNSIGNED
__CONSOLE__
__CPPUNWIND
__cplusplus
__DLL__
_M_IX86__
__MSDOS__
__MT__
__OVERLAY__
__PASCAL__
__TCPLUSPLUS __
__TEMPLATES__
__TLS__
__TURBOC__
__WCHAR_T
__WCHAR_T_DEFINED
__Windows
__WIN32__
Макрос __DATE__ содержит строку в виде месяц/день/год, соответствующую дате перевода исходного кода в объектный.
Время, когда был откомпилирован исходный код, содержится в строке __TIME__ в формате
часы: минуты: секунды.
Если определен макрос __STDC__ то, значит, программа была откомпилирована с использованием стандарта ANSI С со включенной проверкой на совместимость. В противном случае
__STDC__ не определен.
__ВСОРТ__ определен, если используется оптимизация.
При использовании Borland С++ если компилировать программу как С++-программу, то определяется макрос __BCPLUSPLUS__. Компиляция С++-программы также приводит к определению __TCPLUSPLUS__. Оба макроса содержат шестнадцатиричные значения, увеличивающиеся с каждой новой версией компилятора.
__BORLANDC__ содержит текущую версию компилятора (в шестнадцатиричном виде).
Макрос __CDECL__ определен, если используется стандартное соглашение С о вызове функций, т.е. паскалевский вызов не используется. В противном случае макрос не определен (если определен, то он принимает значение 1).
Если определен __CHAR_UNSIGNED, то стандартным символьным типом становится unsigned.
Если __CONSOLE__ определен для 32-битного компилятора, то программа является консольным приложением.
Если __CPPUNWIND определен, то разрешено разворачивание стека.
Если программа откомпилирована как С++-программа, то __cplusplus установлен в 1.
Для Borland С++ __DLL__ установлен в 1 при создании DLL-файла.
Макрос __М_IХ86 определен всегда.
Макрос __MSDOS__ установлен в 1 при использовании MS-DOS версии Borland C/C++.
Макрос __МТ__ установлен в 1, если многопоточная библиотека используется с 32-битным
компилятором.
Когда программа компилируется с использованием оверлеев, то __OVERLAY__ установлен в 1.
Макрос __PASCAL__ установлен в 1 только в том случае, если при компиляции программы
используется паскалевское соглашение о вызовах функций.
Для Borland С++ __TEMPLATES__ установлен в 1 для всех версий компиляторов, поддерживающих шаблоны. Данный макрос применим только при компиляции С++-программ.
При компиляции с использованием 32-компилятора __TLS__ содержит ненулевое значение.
__TURBOC__ содержит шестнадцатиричное значение, увеличивающееся с каждой новой версией языка.
Для С++-программ _WCHAR_T и _WCHAR_T_DEFINED установлены в 1 для указания того, что тип wchar_t является встроенным типом данных. Они не определены для С-программ.
Для Borland С++ _Windows определен, если программа компилируется для использования под Windows.
При использовании 32-битного компилятора __WIN32__ установлен в 1.
В большинстве случаев данные макросы используются для достаточно сложных сред программирования, когда разрабатываются или поддерживаются несколько различных версий программ.