Программирование на C и C++

Онлайн справочник программиста на C и C++

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

Стандарт 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.

В большинстве случаев данные макросы используются для достаточно сложных сред програм­мирования, когда разрабатываются или поддерживаются несколько различных версий программ.