Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

Операторы препроцессора # и ##

С предоставляет два оператора препроцессора: # и ##. Данные операторы используются в сово­купности c #define.

Оператор # помещает аргумент, перед которым он стоит, в двойные кавычки. Например, рас­смотрим программу: #include "stdio.h" #define mkstr(s) # s int main(void) { printf(mkstr(I like C) ); return 0; }

Препроцессор превратит строку printf(mkstr(I like C)); в строку printf ("I like С");

Оператор ## используется для конкатенации двух частей. Например: #include "stdio.h" #define concat(a, b) a ## b int main(void) { int xy = 10; printf("%d", concat(x, y)); return 0; }

Препроцессор преобразует printf("%d", concat(x, y) ); в printf("%d", xy);

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]