__USE_MISC
私はそれがどのように機能し、どこに文書化されているのか知りたいです。ファイル内で.h
これを必要とし、言及する多くの機能を見ることができます。しかし、何かがそれを積極的に定義しているようですが、何がこれをしていて、どのように決定を下すかを知りたいです。
#define __USE_MISC 1
#include <stdio.h>
int main()
{
printf("%d\n", __USE_MISC);
}
商品を返す
__USE_MISC
エラー:宣言されていない識別子 ""を使用しました。
_USE_MISC
または など、別の名前で呼び出すとUSE_MISC
エラーが消えますfoobar
。
私はclangとgccを使ってみました。
答え1
これらのマクロは、ユーザーが定義または確認しないでください。glibc__USE_*
ヘッダーに機能セレクタ(など)_XOPEN_SOURCE
を実装するメカニズムです_GNU_SOURCE
。
完全なメカニズムはコメントに文書化されています。features.h
ヘッダー。
このfeatures.h
ヘッダーはほとんどの標準ヘッダー(fromなどstdio.h
)に含まれています。最初に行うことは、すべてのマクロを定義解除してから、カスタム__USE_*
マクロなどに基づいてオプション_POSIX_C_SOURCE
で定義することです。_GNU_SOURCE
その後、標準ヘッダーはこれらのマクロに基づいてコンテンツをifdefします__USE_*
。
__USE_*
マクロからマクロを開くマクロに再マッピングする方法を知りたい場合があります_*_SOURCE
。たとえば、プログラムをにコンパイルし、関数が開かれたときにのみ定義されていることをgcc -ansi
確認し、どのセレクタがその機能を取得します。以下は、さまざまなセレクタで実行されるスクリプトによって生成されたテーブルです。psignal()
__USE_XOPEN2K8
_*_SOURCE
gcc -ansi -E -dM "-D$source" -include features.h
__USE_ATFILE
_ATFILE_SOURCE _DEFAULT_SOURCE _GNU_SOURCE
_POSIX_C_SOURCE>=200809L _XOPEN_SOURCE>=700
__USE_FILE_OFFSET64
_FILE_OFFSET_BITS>=64
__USE_GNU
_GNU_SOURCE
__USE_ISOC11
_GNU_SOURCE _ISOC11_SOURCE
__USE_ISOC95
_DEFAULT_SOURCE _GNU_SOURCE _ISOC11_SOURCE _ISOC99_SOURCE
_POSIX_C_SOURCE>=200112L _XOPEN_SOURCE>=600
__USE_ISOC99
_DEFAULT_SOURCE _GNU_SOURCE _ISOC11_SOURCE _ISOC99_SOURCE
_POSIX_C_SOURCE>=200112L _XOPEN_SOURCE>=600
__USE_LARGEFILE
_GNU_SOURCE _LARGEFILE_SOURCE _XOPEN_SOURCE>=500
__USE_LARGEFILE64
_GNU_SOURCE _LARGEFILE64_SOURCE
__USE_MISC
_DEFAULT_SOURCE _GNU_SOURCE
__USE_POSIX
_DEFAULT_SOURCE _GNU_SOURCE _POSIX_C_SOURCE _POSIX_SOURCE
_XOPEN_SOURCE>=500
__USE_POSIX199309
_DEFAULT_SOURCE _GNU_SOURCE _POSIX_C_SOURCE>=199309L
_XOPEN_SOURCE>=500
__USE_POSIX199506
_DEFAULT_SOURCE _GNU_SOURCE _POSIX_C_SOURCE>=199506L
_XOPEN_SOURCE>=500
__USE_POSIX2
_DEFAULT_SOURCE _GNU_SOURCE _POSIX_C_SOURCE>=2
_XOPEN_SOURCE>=500
__USE_POSIX_IMPLICITLY
_DEFAULT_SOURCE _XOPEN_SOURCE>=500
__USE_REENTRANT
_REENTRANT _THREAD_SAFE
__USE_UNIX98
_GNU_SOURCE _XOPEN_SOURCE>=500
__USE_XOPEN
_GNU_SOURCE _XOPEN_SOURCE>=500
__USE_XOPEN2K
_DEFAULT_SOURCE _GNU_SOURCE _POSIX_C_SOURCE>=200112L
_XOPEN_SOURCE>=600
__USE_XOPEN2K8
_DEFAULT_SOURCE _GNU_SOURCE _POSIX_C_SOURCE>=200809L
_XOPEN_SOURCE>=700
__USE_XOPEN2K8XSI
_GNU_SOURCE _XOPEN_SOURCE>=700
__USE_XOPEN2KXSI
_GNU_SOURCE _XOPEN_SOURCE>=600
__USE_XOPEN_EXTENDED
_GNU_SOURCE _XOPEN_SOURCE>=500