Provided by: manpages-ru_4.27.0-1_all 

НАИМЕНОВАНИЕ
feature_test_macros - макросы тестирования свойств
ОПИСАНИЕ
Макросы тестирования свойств позволяют программисту контролировать какие определения будут доступны из системных заголовочных файлов при компиляции программы. ЗАМЕЧАНИЕ: В целях эффективности, макрос тестирования свойств должен быть определён до включения всех заголовочных файлов. Это можно сделать или в команде компиляции (cc -DМАКРОС=значение) или определив макрос в исходном коде до включения заголовочных файлов. Требование включения макроса раньше остальных заголовочных файлов возникло из-за того, что заголовочные файлы могут включаться друг в друга в любой последовательности. Например, в следующих строках определение макроса _GNU_SOURCE может не сработать, так как заголовок <abc.h> сам включает <xyz.h> (в POSIX это разрешается явным образом): #include <abc.h> #define _GNU_SOURCE #include <xyz.h> Некоторые макросы тестирования свойств полезны для создания переносимых приложений; они позволяют блокировать нестандартные определения. Другие макросы можно использовать для разблокировки нестандартных определений, которые по умолчанию недоступны. Действие каждого макроса тестирования свойств, описанного далее, можно узнать из содержимого заголовочного файла <features.h>. Замечание: в приложениях не нужно явно включать <features.h> — это не приветствуется. Смотрите ЗАМЕЧАНИЯ. Обозначение макросов тестирования свойств в справочных страницах Когда функции требуется определение макроса тестирования свойств в ОБЗОРЕ справочной страницы, обычно, содержится упоминание в следующем виде (этот пример взят из справочной страницы acct(2)): #include <unistd.h> int acct(const char *filename); Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)): acct(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500) Символ || означает, что для получения объявления acct(2) из <unistd.h> нужно определить любой из следующих макросов до включения любых заголовочных файлов: #define _BSD_SOURCE #define _XOPEN_SOURCE /* или любое значение < 500 */ Или же эквивалентные определения могут быть включены следующей командой компиляции: cc -D_BSD_SOURCE cc -D_XOPEN_SOURCE # или любое значение < 500 Как описывается далее, некоторые макросы тестирования свойств определяются по умолчанию, поэтому макрос не всегда нужно указывать явно даже, если он приведён в ОБЗОРЕ. В некоторых случаях в справочных страницах используется сокращённая запись требований макросов тестирования свойств (пример из readahead(2)): #define _GNU_SOURCE #define _FILE_OFFSET_BITS 64 #include <fcntl.h> ssize_t readahead(int fd, off_t *offset, size_t count); This format is employed when the feature test macros ensure that the proper function declarations are visible, and the macros are not defined by default. Макросы тестирования свойств, распознаваемые glibc The paragraphs below explain how feature test macros are handled in glibc 2.x, x > 0. First, though, a summary of a few details for the impatient: • Макросы, которые вам, вероятно, понадобится использовать в современном коде: _POSIX_C_SOURCE (определения из различных версий POSIX.1), _XOPEN_SOURCE (определения из различных версий SUS), _GNU_SOURCE (специальные возможности GNU и/или Linux) и _DEFAULT_SOURCE (определения, которые, обычно, включены по умолчанию). • Некоторые макросы определяют значения по умолчанию. То есть, хотя один или более макросов могут быть указаны как необходимые в ОБЗОР справочной страницы, возможно необязательно определять их явно. Полное описание значений по умолчанию приведены далее в этой справочной странице. • Определение _XOPEN_SOURCE со значением 600 и более даёт тот же эффект что и определение _POSIX_C_SOURCE со значением 200112L и больше. Если требуется _POSIX_C_SOURCE >= 200112L в макросах тестирования свойств ОБЗОРА справочной страницы, то это неявным образом тоже что и: _XOPEN_SOURCE >= 600 • Определение _XOPEN_SOURCE со значением 700 и более даёт тот же эффект что и определение _POSIX_C_SOURCE со значением 200809L и больше. Если требуется _POSIX_C_SOURCE >= 200809L в макросах тестирования свойств ОБЗОРА справочной страницы, то это неявным образом тоже что и: _XOPEN_SOURCE >= 700 glibc understands the following feature test macros: __STRICT_ANSI__ Стандарт ISO C. Этот макрос неявно определяется компилятором gcc(1), если он вызывается с флагом -std=c99 или -ansi. _POSIX_C_SOURCE При определении этого макроса из заголовочных файлов становится доступно следующее: • При значении 1 доступны определения, удовлетворяющие POSIX.1-1990 и ISO C (1990). • При значении 2 и более дополнительно доступны определения, удовлетворяющие POSIX.2-1992. • При значении 199309L и более дополнительно доступны определения, удовлетворяющие POSIX.1b (расширения для реального времени). • При значении 199506L и более дополнительно доступны определения, удовлетворяющие POSIX.1c (нити). • (начиная с glibc 2.3.3) При значении 200112L и более доступны определения, удовлетворяющие базовой спецификации POSIX.1-2001 (за исключением расширения XSI) а также свойства C95 (начиная с glibc 2.12) и C99 (начиная с glibc 2.10). Другими словами это эквивалент определения _ISOC99_SOURCE. • (начиная с glibc 2.10) При значении 200809L и более доступны определения, удовлетворяющие базовой спецификации POSIX.1-2008 (за исключением расширения XSI). _POSIX_SOURCE Определение этого устаревшего макроса с любым значением эквивалентно определению _POSIX_C_SOURCE со значением 1. Так как этот макрос устарел, его использование, обычно, не описывается при обсуждении требований макросов тестирования свойств в справочной странице. _XOPEN_SOURCE При определении этого макроса из заголовочных файлов становится доступно следующее: • Определение с любым значением делает доступным определения, удовлетворяющие POSIX.1, POSIX.2 и XPG4. • При значении 500 и более дополнительно доступны определения, удовлетворяющие SUSv2 (UNIX 98). • (начиная с glibc 2.2) При значении 600L и более дополнительно доступны определения, удовлетворяющие SUSv3 (UNIX 03; т. е., базовой спецификации POSIX.1-2001 плюс расширение XSI), и определения C99. • (начиная с glibc 2.10) При значении 700 и более дополнительно доступны определения, удовлетворяющие SUSv4 (т. е., базовой спецификации POSIX.1-2008 плюс расширение XSI). If __STRICT_ANSI__ не определено или определено _XOPEN_SOURCE со значением больше или равно 500 и явно не определено _POSIX_SOURCE или _POSIX_C_SOURCE, то неявно определяются следующие макросы: • _POSIX_SOURCE определяется со значением 1. • _POSIX_C_SOURCE определяется согласно значению _XOPEN_SOURCE: _XOPEN_SOURCE < 500 _POSIX_C_SOURCE определяется со значением 2. 500 <= _XOPEN_SOURCE < 600 _POSIX_C_SOURCE определяется со значением 199506L. 600 <= _XOPEN_SOURCE < 700 _POSIX_C_SOURCE определяется со значением 200112L. 700 <= _XOPEN_SOURCE (начиная с glibc 2.10) _POSIX_C_SOURCE определяется со значением 200809L. Также, определение _XOPEN_SOURCE со значением 500 и более даёт тот же эффект что и определение _XOPEN_SOURCE_EXTENDED. _XOPEN_SOURCE_EXTENDED Если этот макрос определён вместе с _XOPEN_SOURCE, то доступны определения, соответствующие расширениям UNIX (UNIX 95) XPG4v2 (SUSv1). Определение _XOPEN_SOURCE со значением 500 и более также вызывает эффект, подобный _XOPEN_SOURCE_EXTENDED. Использование _XOPEN_SOURCE_EXTENDED в новом коде следует избегать. Так как определение _XOPEN_SOURCE со значением 500 и более даёт тот же эффект, что и _XOPEN_SOURCE_EXTENDED, последний (устаревший) макрос тестирования свойств, обычно, не описывается в ОБЗОРЕ справочной страницы. _ISOC99_SOURCE (начиная с glibc 2.1.3) Делает доступными объявления, удовлетворяющие требованиям стандарта ISO C99. Ранние версии glibc 2.1.x распознавали макрос-эквивалент _ISOC9X_SOURCE (так как стандарт C99 ещё не был утверждён). Хотя использование последнего макроса не рекомендуется, glibc пока поддерживает его для обратной совместимости. Делает доступными определения стандарта ISO C (1990) Amendment 1 («C95»). Основным изменением в C95 была поддержка международных наборов символов. Вызов компилятора C с параметром -std=c99 работает также как если был бы указан этот макрос. _ISOC11_SOURCE (начиная с glibc 2.16) Делает доступными объявления, удовлетворяющие требованиям стандарта ISO C11. Определение этого макроса также включает свойства C99 и C95 (подобно _ISOC99_SOURCE). Вызов компилятора C с параметром -std=c11 работает также как если был бы указан этот макрос. _LARGEFILE64_SOURCE Делает доступными объявления альтернативного программного интерфейса, определяемого в LFS (Large