logo
Подбельский Фомин_Программирование на языке СИ_

3.7. Встроенные (заранее определенные) макроимена

Существуют встроенные (заранее определенные) макроимена, доступные препроцессору во время обработки. Они позволяют получить следующую информацию:

_LINE_ - десятичная константа - номер текущей обрабатываемой строки файла с программой на Си. Принято, что номер первой строки исходного файла равен 1;

_FILE_ - строка символов - имя компилируемого файла. Имя изменяется всякий раз, когда препроцессор встречает директиву #include с указанием имени другого файла. Когда включения файла по команде ftinclude завершаются, восстанавливается предыдущее значение макроимени __FILE__;

_DATE_ - строка символов в формате: "месяц число год", определяющая дату начала обработки исходного файла. Например, после препроцессорной обработки текста программы, выполненной 10 марта 1997 года, оператор

printf(__DATE__); станет таким:

printf("Mar 10 1997");

_TIME_ - строка символов вида "часы: минуты :секунды", определяющая время начала обработки препроцессором исходного файла;

_STDC_ - константа, равная 1, если компилятор работает в соответствии с ANSI-стандартом. В противном случае значение макроимени__STDC_не определено. Стандарт языка Си предполагает, что наличие имени__STDC__определяется реализацией, так как макрос__STDC__относится к нововведениям стандарта.

В конкретных реализациях набор предопределенных имен шире. Например, в препроцессор компилятора Borland C++ дополнительно включены:

_ВСОРТ_ - имя, определенное равным 1, если при компиляции используется оптимизация;

_BCPLUSPLUS_- числовое значение соответствует версии компилятора (определен для компилятора Си++);

_CDECL_ - идентифицирует порядок передачи параметров функциям, значение 1 соответствует порядку, принятому в языке Си (в отличие от языка Паскаль);

__CONSOLE__ - определено для 32-разрядного компилятора и установлено в 1 для программ консольного приложения;

_DLL_ - соответствует работе в режиме Windows DLL;

_MSDOS_ - равно 1 для 16-разрядных компиляторов Borland C++, устанавливается в 0 для 32-разрядного компилятора;

__МТ__ - макрос доступен только для 32-разрядного компилятора; _OVERLAY_ - значение равно 1 в оверлейном режиме;

__PASCAL__ - противоположен__CDECL__;

_TCPLUSPLUS_- числовое значение соответствует версии компилятора (определено для компилятора Си++);

__TLS__ - определен как истинный для 32-разрядного компилятора;

_TURBOC__ - числовое значение, равное 0x0400 для компилятора Borland C++ 4.0 (0x0460 -для Borland C++ 4.5 и т.д.);

__WINDOWS_ - означает генерацию кода для Windows;

__WIN32__ - определен для 32-разрядного компилятора и установлен в 1 для консольных приложений.

Для получения более полных сведений о предопределенных препроцессорных именах следует обращаться к документации по конкретному компилятору.