Provided by: manpages-ru_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       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