【发布时间】:2015-06-21 02:52:02
【问题描述】:
features.h 标头的用途是什么?为什么以及何时可以在我的代码中使用它?
它是否定义了系统支持的源特性? 还是它定义了一些必须根据其他定义定义的附加内容?
【问题讨论】:
features.h 标头的用途是什么?为什么以及何时可以在我的代码中使用它?
它是否定义了系统支持的源特性? 还是它定义了一些必须根据其他定义定义的附加内容?
【问题讨论】:
features.h 头文件提供各种宏定义,指示与其他头文件的标准一致性,即根据用户希望使用的标准,应打开或关闭哪些功能(因此得名)。
大多数 C/C++ 编译器都有命令行选项来处理标准一致性。我们以 GCC 为例:当您通过 -std=gnu9x 选项时,您要求使用 C99 标准的 GNU 方言。 features.h 标头确保包含它的所有其他标头将完全打开或关闭支持此特定方言所需的那些功能。这是通过 #define -ing 或 #undef -ing 一些“中间”宏来实现的。
作为奖励,features.h 还提供了glibc 版本信息宏,以及其他各种小知识。
【讨论】:
按照https://unix.stackexchange.com/questions/340285/install-the-latest-posix-man-pages/483198#483198 中的说明,我已经 grepped POSIX 7,并且 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
另见:Check glibc version for a particular gcc compiler
此外,此标头似乎包含在大多数/所有 glibc 标头中,这可能允许您检查是否正在使用 glibc:How to tell if glibc is used 但 TODO 我找不到相关文档。
【讨论】:
定义是否包含算法变体。 更少的变体减少了可执行文件的大小和编译时间。该文件是标准 C++ 库的 GNU 并行扩展。
所以这个文件将包含参考页面中列出的一些算法。
【讨论】:
一般来说,如果您需要使用头文件中定义的任何变量或函数,您需要将其包含在您的程序中。此规则对features.h 也有效。您可以在下面看到features.h 的网址供您参考:
http://repo-genesis3.cbi.utsa.edu/crossref/heccer/usr/include/features.h.html
【讨论】: