【问题标题】:What is __USE_MISC macro used for?__USE_MISC 宏是做什么用的?
【发布时间】:2012-05-01 04:37:01
【问题描述】:

我正在做一个项目,代码中包含一个宏定义:

#define __USE_MISC

代码没有使用它,所以我认为它有其他用途。

【问题讨论】:

  • 我在<features.h> __USE_MISC 中找到了这个定义 BSD 和 System V Unix 通用的东西。但我仍然不知道它到底是做什么的。

标签: c glibc


【解决方案1】:

__USE_MISC 在/usr/include/features.h 中定义的条件:

#if defined _BSD_SOURCE || defined _SVID_SOURCE
# define __USE_MISC     1
#endif

__USE_MISC --> 定义 BSD 和 System V Unix 共有的东西。

因此,即使_BSD_SOURCE_SVID_SOURCE 都未定义(自glibc 2.20 起,定义_DEFAULT_SOURCE 启用__USE_MISC),您的代码似乎也希望确保在任何情况下都已定义它。

更多信息请参见feature test macros

【讨论】:

  • 另外,我建议 OP 着眼于确保正确配置构建环境(和/或记录所需的配置),而不是使用这个后门 hack。
  • 注意:_BSD_SOURCE_SVID_SOURCE 已被弃用,并被 glibc 2.20 中的 _DEFAULT_SOURCE 取代(_DEFAULT_SOURCE 已添加到 glibc 2.19 中)。
【解决方案2】:

__USE_MISC 是实现的头文件如何处理“功能测试宏”的内部细节,这些宏指示编译器应该为构建提供哪些标准函数集。正如Thiruvalluvar's answer 所示,如果您的构建需要_BSD_SOURCE_SVID_SOURCE 配置,它由库头文件设置(供内部使用)。

您的代码/构建不应直接处理该宏;相反,它应该使用记录在案的功能测试宏。 glibc 的文档可以在这里找到:http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多