features.h
标题的目的是什么?为什么以及何时可以在我的代码中使用它?
是否定义了系统支持的源功能? 或者它是否定义了一些必须根据其他定义定义的其他内容?
答案 0 :(得分:6)
features.h
头文件提供了各种宏定义,表明与其他头文件的标准一致性,即应根据用户希望使用的标准打开或关闭哪些功能(因此名称)。
大多数C / C ++编译器都有命令行选项来处理标准一致性。我们以GCC为例:当你通过-std=gnu9x
选项时,你会要求使用C99标准的GNU方言。 features.h
标头确保包含它的所有其他标头将完全打开或关闭支持此特定方言所需的功能。这是通过#define
-ing或#undef
- 一些“中间”宏来实现的。
作为奖励,features.h
还提供glibc
版本信息宏,以及其他各种位和&鲍勃。
答案 1 :(得分:2)
我已按照https://unix.stackexchange.com/questions/340285/install-the-latest-posix-man-pages/483198#483198的解释对POSIX 7进行了grep过滤,并且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;
}
具有glibc 2.23的Ubuntu 16.04,输出:
__GLIBC__ 2
__GLIBC_MINOR__ 23
另请参阅:Check glibc version for a particular gcc compiler
此外,该头文件似乎已包含在大多数/所有glibc头文件中,这可能使您可以检查是否正在使用glibc:How to tell if glibc is used,但TODO我找不到有关此文件的文档。
答案 2 :(得分:0)
通常,如果您需要使用头文件中定义的任何变量或函数,则需要将其包含在程序中。此规则也适用于features.h
。您可以在下面看到features.h
的网址供您参考:
http://repo-genesis3.cbi.utsa.edu/crossref/heccer/usr/include/features.h.html
答案 3 :(得分:0)
定义是否包含算法变体。 较少的变体减少了可执行文件大小和编译此文件是标准C ++库的GNU并行扩展。
因此该文件将包含参考页面中列出的一些算法。