gpt4 book ai didi

c - 像 _GNU_SOURCE 这样的宏,它们是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 11:08:44 30 4
gpt4 key购买 nike

很多次在引用 linux 头文件或 man 文件时,我看到使用了以下宏..

例如:man mkstemp

在此手册页中,我们可以看到以下宏的特色。

_GNU_SOURCE
_BSD_SOURCE
_SVID_SOURCE
_XOPEN_SOURCE
_XOPEN_SOURCE_EXTENDED

如果我使用这些 API/ header ,我应该理解什么才能编写正确的程序?

最佳答案

阅读feature_test_macros(7)手册页(以及 GNU libc 文档的 §1.3.4 Feature Test Macros 章节)。

您可能会使用一些特殊的功能符号来编译您的整个程序。例如,我经常用 -D_GNU_SOURCE 编译一个程序.这意味着我需要 GNU libc 等在我的系统上提供的所有额外的 GNU 特定功能。您可以改为使用 -D_POSIX_C_SOURCE=200112L 进行编译。如果你想要严格 POSIX 2001 年合规(仅此而已)。

或者,如果您所有的 .c文件只是 #include - 仅使用您自己的 header ,该 header 可以以 #define _GNU_SOURCE 1 开头其次是几个系统#include ....

重点是 GNU/Linux 系统遵守几个标准(GNU 提供自己的标准),您可以选择其中的一个。

GNU libc (这是 Linux 上最常见的 libc,但您可以使用其他一些 libc,例如 musl-libc ....)提供了许多其他系统不可用的函数、特性和 header ,例如 <argp.h> (标题),fopencookie (函数),%m printf 中的格式控制指令功能。

如果您打算编写可移植到其他 POSIX 系统(例如 MacOSX)的程序,它也很重要。在 MacOSX 或 AIX 系统上,您没有 getopt_long因为它是 GNU 特定的函数。

关于c - 像 _GNU_SOURCE 这样的宏,它们是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26417973/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com