작업 중.
NAME
feature_test_macros - 기능 확인 매크로
DESCRIPTION
기능 확인 매크로를 이용하면 프로그램 컴파일 시 시스템 헤더 파일에 노출되는 정의들을 프로그래머가 제어할 수 있다.
주의: 기능 확인 매크로가 효과가 있으려면 헤더 파일 포함 전에 정의해야 한다. 컴파일 명령(cc -DMACRO=value
)으로 정의하거나 소스 코드에서 헤더 파일을 포함시키기 전에 정의하면 된다. ....
#include <abc.h>
#define _GNU_SOURCE
#include <xyz.h>
....
....
매뉴얼 페이지 내의 기능 확인 매크로 요구 조건 명세
....
#include <unistd.h> int acct(const char *filename);
glibc 기능 확인 매크로 요건 (feature_test_macros(7) 참고):
acct()
_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
....
#define _BSD_SOURCE
#define _XOPEN_SOURCE /* 또는 < 500 인 아무 값 */
....
cc -D_BSD_SOURCE
cc -D_XOPEN_SOURCE # 또는 < 500 인 아무 값
....
....
#define _GNU_SOURCE
#include <fcntl.h>
ssize_t readahead(int fd, off64_t *offset, size_t count);
....
glibc에서 이해하는 기능 확인 매크로
....
....
-
....
-
....
-
....
_POSIX_C_SOURCE >= 200112L
....
_XOPEN_SOURCE >= 600
-
....
_POSIX_C_SOURCE >= 200809L
....
_XOPEN_SOURCE >= 700
....
....
__STRICT_ANSI__
- ....
_POSIX_C_SOURCE
-
....
- ....
- ....
- ....
- ....
- ....
- ....
_POSIX_SOURCE
-
....
....
_XOPEN_SOURCE
-
....
- ....
- ....
- ....
- ....
....
- ....
-
....
_XOPEN_SOURCE < 500
- ....
500 <= _XOPEN_SOURCE < 600
- ....
600 <= _XOPEN_SOURCE < 700
- ....
700 <= _XOPEN_SOURCE
(glibc 2.10부터)- ....
....
_XOPEN_SOURCE_EXTENDED
-
....
....
_ISOC99_SOURCE
(glibc 2.1.3부터)-
....
....
....
....
_ISOC11_SOURCE
(glibc 2.16부터)-
....
....
_LARGEFILE64_SOURCE
- ....
_LARGEFILE_SOURCE
- ....
_FILE_OFFSET_BITS
-
....
....
_BSD_SOURCE
(glibc 2.20부터 제거 예정 상태)-
....
....
....
_SVID_SOURCE
(glibc 2.20부터 제거 예정 상태)-
....
....
_DEFAULT_SOURCE
(glibc 2.19부터)-
....
....
cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809
_ATFILE_SOURCE
(glibc 2.4부터)- ....
_GNU_SOURCE
-
....
....
_REENTRANT
-
....
....
....
....
_THREAD_SAFE
- ....
_FORTIFY_SOURCE
(glibc 2.3.4부터)-
....
....
....
....
기본 정의, 암묵적 정의, 결합 정의
....
....
....
-
....
-
....
-
....
-
....
-
....
-
....
-
....
-
....
....
CONFORMING TO
....
....
....
NOTES
....
....
EXAMPLES
....
$ cc ftm.c
$ ./a.out
_POSIX_SOURCE defined
_POSIX_C_SOURCE defined: 200809L
_BSD_SOURCE defined
_SVID_SOURCE defined
_ATFILE_SOURCE defined
$ cc -D_XOPEN_SOURCE=500 ftm.c
$ ./a.out
_POSIX_SOURCE defined
_POSIX_C_SOURCE defined: 199506L
_XOPEN_SOURCE defined: 500
$ cc -D_GNU_SOURCE ftm.c
$ ./a.out
_POSIX_SOURCE defined
_POSIX_C_SOURCE defined: 200809L
_ISOC99_SOURCE defined
_XOPEN_SOURCE defined: 700
_XOPEN_SOURCE_EXTENDED defined
_LARGEFILE64_SOURCE defined
_BSD_SOURCE defined
_SVID_SOURCE defined
_ATFILE_SOURCE defined
_GNU_SOURCE defined
프로그램 소스
/* ftm.c */
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
#ifdef _POSIX_SOURCE
printf("_POSIX_SOURCE defined\n");
#endif
#ifdef _POSIX_C_SOURCE
printf("_POSIX_C_SOURCE defined: %jdL\n",
(intmax_t) _POSIX_C_SOURCE);
#endif
#ifdef _ISOC99_SOURCE
printf("_ISOC99_SOURCE defined\n");
#endif
#ifdef _ISOC11_SOURCE
printf("_ISOC11_SOURCE defined\n");
#endif
#ifdef _XOPEN_SOURCE
printf("_XOPEN_SOURCE defined: %d\n", _XOPEN_SOURCE);
#endif
#ifdef _XOPEN_SOURCE_EXTENDED
printf("_XOPEN_SOURCE_EXTENDED defined\n");
#endif
#ifdef _LARGEFILE64_SOURCE
printf("_LARGEFILE64_SOURCE defined\n");
#endif
#ifdef _FILE_OFFSET_BITS
printf("_FILE_OFFSET_BITS defined: %d\n", _FILE_OFFSET_BITS);
#endif
#ifdef _BSD_SOURCE
printf("_BSD_SOURCE defined\n");
#endif
#ifdef _SVID_SOURCE
printf("_SVID_SOURCE defined\n");
#endif
#ifdef _DEFAULT_SOURCE
printf("_DEFAULT_SOURCE defined\n");
#endif
#ifdef _ATFILE_SOURCE
printf("_ATFILE_SOURCE defined\n");
#endif
#ifdef _GNU_SOURCE
printf("_GNU_SOURCE defined\n");
#endif
#ifdef _REENTRANT
printf("_REENTRANT defined\n");
#endif
#ifdef _THREAD_SAFE
printf("_THREAD_SAFE defined\n");
#endif
#ifdef _FORTIFY_SOURCE
printf("_FORTIFY_SOURCE defined\n");
#endif
exit(EXIT_SUCCESS);
}
SEE ALSO
libc(7), standards(7), system_data_types(7)
info libc
의 "Feature Test Macros" 절.
/usr/include/features.h
2021-03-22