__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
이러한 매크로는 사용자가 정의하거나 확인해서는 안 되며, __USE_*
glibc 헤더에 기능 선택기( 등) _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