Какова цель заголовка features.h?
Какова цель заголовка features.h
? Почему и когда это может быть использовано в моем коде?
Определяет ли он исходные функции, поддерживаемые системой? Или это определяет некоторые дополнительные вещи, которые должны быть определены в зависимости от других определений?
Ответы
Ответ 1
Заголовочный файл features.h
предоставляет различные определения макросов, которые указывают стандартное соответствие другим файлам заголовков, то есть какие функции (отсюда и название) должны быть включены или отключены в зависимости от того, какой стандарт пользователь хочет использовать.
Большинство компиляторов C/С++ имеют параметры командной строки для соответствия стандартам. Возьмем GCC в качестве примера: когда вы передаете параметр -std=gnu9x
, вы запрашиваете диалект GNU стандарта C99. Заголовок features.h
гарантирует, что все остальные заголовки, которые его включают, будут включать те или иные функции, которые необходимы для поддержки этого конкретного диалекта. Это достигается с помощью #define
-ing или #undef
с некоторыми "промежуточными" макросами.
В качестве бонуса features.h
также предоставляет макросы с информацией о версии версии glibc
, а также различные другие бит и бобы.
Ответ 2
В общем случае, если вам нужно использовать какие-либо переменные или функции, определенные в файле заголовка, вам необходимо включить его в свою программу. Это правило справедливо и для features.h
. URL-адрес features.h
приведен ниже:
http://repo-genesis3.cbi.utsa.edu/crossref/heccer/usr/include/features.h.html
Ответ 3
Из features.h Ссылка на файл
Определяет, следует ли включать варианты алгоритма. Меньшие варианты уменьшают размер исполняемого файла и время компиляции. Этот файл является параллельным расширением GNU для стандартной библиотеки С++.
Таким образом, этот файл будет содержать некоторый алгоритм, указанный на ссылочной странице.
Ответ 4
Я grepped POSIX 7, как описано в: https://unix.stackexchange.com/info/340285/install-the-latest-posix-man-pages/483198#483198 и нет хитов для features.h
, так должно быть только расширением glibc.
В glibc 2.28 он присутствует в include/features.h
.
Одной из интересных вещей, которые он определяет, являются макросы версии:
#include <stdio.h>
#include <features.h>
int main(void) {
printf("__GLIBC__ %u\n", __GLIBC__);
printf("__GLIBC_MINOR__ %u\n", __GLIBC_MINOR__);
return 0;
}
Ubuntu 16.04, который имеет glibc 2.23, выводит:
__GLIBC__ 2
__GLIBC_MINOR__ 23
Смотрите также: Проверьте версию glibc для определенного компилятора gcc
Кроме того, этот заголовок, кажется, включается в большинство/все заголовки glibc, что может позволить вам проверить, используется ли glibc: как определить, используется ли glibc, но TODO Я не смог найти документацию для этого.