【问题标题】:What is the purpose of features.h header?features.h 标头的目的是什么?
【发布时间】:2015-06-21 02:52:02
【问题描述】:

features.h 标头的用途是什么?为什么以及何时可以在我的代码中使用它?

它是否定义了系统支持的源特性? 还是它定义了一些必须根据其他定义定义的附加内容?

【问题讨论】:

    标签: linux unix posix


    【解决方案1】:

    features.h 头文件提供各种宏定义,指示与其他头文件的标准一致性,即根据用户希望使用的标准,应打开或关闭哪些功能(因此得名)。

    大多数 C/C++ 编译器都有命令行选项来处理标准一致性。我们以 GCC 为例:当您通过 -std=gnu9x 选项时,您要求使用 C99 标准的 GNU 方言。 features.h 标头确保包含它的所有其他标头将完全打开或关闭支持此特定方言所需的那些功能。这是通过 #define -ing 或 #undef -ing 一些“中间”宏来实现的。

    作为奖励,features.h 还提供了glibc 版本信息宏,以及其他各种小知识。

    【讨论】:

      【解决方案2】:

      按照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 我找不到相关文档。

      【讨论】:

        【解决方案3】:

        来自features.h File Reference

        定义是否包含算法变体。 更少的变体减少了可执行文件的大小和编译时间。该文件是标准 C++ 库的 GNU 并行扩展。

        所以这个文件将包含参考页面中列出的一些算法。

        【讨论】:

        • 你指的是glibcxx的parallel/features.h,但问题是关于顶级Linux头文件features.h。
        【解决方案4】:

        一般来说,如果您需要使用头文件中定义的任何变量或函数,您需要将其包含在您的程序中。此规则对features.h 也有效。您可以在下面看到features.h 的网址供您参考:

        http://repo-genesis3.cbi.utsa.edu/crossref/heccer/usr/include/features.h.html

        【讨论】:

        • 问题实际上是:为什么在 features.h 中定义以及何时需要使用它们,而不是为什么头文件...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        • 2022-10-24
        • 1970-01-01
        • 2013-04-19
        • 2011-05-17
        • 2022-01-26
        • 1970-01-01
        相关资源
        最近更新 更多