web-dev-qa-db-ja.com

_GNU_SOURCEおよび__USE_GNU

CPU_SETで定義する必要があるglibclinux固有のマクロであるsched.hを使用したい。マンページには、マクロを定義するために_GNU_SOURCEを定義する必要があると明記されています。ただし、ヘッダーを見ると、CPU_SETは、__USE_GNUが定義されている場合にのみ定義されます(#ifdefガードがあります)。数年前、_GNU_SOURCEが必要だったことを覚えているようです。

質問:

1)明らかにマンページがオフになっています。マンページが正しくないことをメンテナに通知するにはどうすればよいですか?

2)_GNU_SOURCEから__USE_GNUへの移行はいつ行われましたか(バージョンまたは時間のいずれかで)

3)新しいバージョンのglibcがまだ_GNU_SOURCEを使用している状況はありますか?または、__USE_GNUを定義するだけで十分であると安全に想定できますか?

27
Foo Bah

_GNU_SOURCEは、自分で定義する必要がある唯一のものです。 __USE_GNUは、features.hが定義されている場合、および場合によっては他の条件下で、_GNU_SOURCE(他のすべてのglibcヘッダーに含まれている)のメカニズムを介して内部的に定義されます。 __USE_GNUを自分で定義または定義解除すると、glibcヘッダーがひどく壊れます。

30
R..

何よりも先にdefine_GNU_SOURCEを定義する必要があります。このスニペットはここで機能します:

#define _GNU_SOURCE
#include <sched.h>


int main()
{
    cpu_set_t set;
    CPU_SET(0, &set);
    return 0;
}
9