Man page - feature_test_macros(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr ja ru deManual
FEATURE_TEST_MACROS
名 前説 明
マ ニ ュ ア ル ペ ー ジ で の 機 能 検 査 マ ク ロ の 要 件 の 規 定
glibc が 解 釈 す る 機 能 検 査 マ ク ロ
デ フ ォ ル ト の 定 義 、 暗 黙 の 定 義 、 組 み 合 わ せ 定 義
準 拠
注 意
例
プ ロ グ ラ ム の ソ ー ス
関 連 項 目
こ の 文 書 に つ い て
名 前
feature_test_macros - 機 能 検 査 マ ク ロ
説 明
機 能 検 査 マ ク ロ (feature test macro) に よ り 、 プ ロ グ ラ マ は プ ロ グ ラ ム が コ ン パ イ ル さ れ る 際 に シ ス テ ム の ヘ ッ ダ ー フ ァ イ ル に よ り 公 開 さ れ る 定 義 を 制 御 す る こ と が で き る 。
注 意 : 機 能 検 査 マ ク ロ を 機 能 さ せ る に は 、 機 能 検 査 マ ク ロ の 定 義 を 「 ど の ヘ ッ ダ ー フ ァ イ ル の イ ン ク ル ー ド よ り も 前 で 」 行 わ な け れ ば な ら な い 。 こ れ を 実 現 す る に は 、 コ ン パ イ ル コ マ ン ド で 指 定 す る 方 法 ( cc -DMACRO=value ) と 、 ソ ー ス コ ー ド 内 で 必 要 な マ ク ロ の 定 義 を ど の ヘ ッ ダ ー の イ ン ク ル ー ド よ り も 前 で 行 う 方 法 が あ る 。 ど の ヘ ッ ダ ー フ ァ イ ル を イ ン ク ル ー ド す る よ り も 前 に こ れ ら の マ ク ロ を 定 義 し な け れ ば な ら な い と い う 要 件 が 存 在 す る の は 、 ヘ ッ ダ ー フ ァ イ ル は お 互 い に 自 由 に イ ン ク ル ー ド で き る か ら で あ る 。 そ の た め 、 例 え ば 、 以 下 の 例 で は 、 ヘ ッ ダ ー <abc.h> 自 身 が <xyz.h> を イ ン ク ル ー ド し て い る と 、 _GNU_SOURCE マ ク ロ の 定 義 は 全 く 効 果 が な い か も し れ な い (こ の よ う な イ ン ク ル ー ド は POSIX で は 明 示 的 に 認 め ら れ て い る )。
#include
<abc.h>
#define _GNU_SOURCE
#include <xyz.h>
機 能 検 査 マ ク ロ を 使 う と 、 非 標 準 の 定 義 が 公 開 さ れ な い よ う に で き 、 移 植 性 の あ る ア プ リ ケ ー シ ョ ン を 作 成 す る の に 役 立 つ 。 他 の マ ク ロ を 使 う と 、 デ フ ォ ル ト で は 公 開 さ れ な い 非 標 準 の 定 義 を 公 開 す る こ と が で き る 。
以 下 で 説 明 す る 機 能 検 査 マ ク ロ の そ れ ぞ れ の 正 確 な 影 響 を 確 認 す る に は 、 ヘ ッ ダ ー フ ァ イ ル <features.h> を 調 べ れ ば よ い 。 注 意 : ア プ リ ケ ー シ ョ ン が <features.h> を 直 接 イ ン ク ル ー ド す る 必 要 は 「 な い 」 。 実 際 の と こ ろ 、 イ ン ク ル ー ド す る の は 全 く 勧 め ら れ な い 。 「 注 意 」 の 節 を 参 照 。
マ ニ ュ ア ル ペ ー ジ で の 機 能 検 査 マ ク ロ の 要 件 の 規 定
関 数 が 機 能 検 査 マ ク ロ の 定 義 を 必 要 と す る 場 合 、 マ ニ ュ ア ル ペ ー ジ の 書 式 (SYNOPSIS) の 節 に 以 下 の 形 式 の 注 釈 を 入 れ る (以 下 の 例 は acct (2) の マ ニ ュ ア ル ペ ー ジ か ら の 引 用 で あ る )。
#include <unistd.h>
int acct(const char * filename );
glibc 向
け の 機 能 検 査
マ ク ロ の 要 件
(
feature_test_macros
(7)
参 照 ):
acct (): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
|| は 、 acct (2) の 定 義 を <unistd.h> か ら 得 る に は 、 以 下 の マ ク ロ の 定 義 の い ず れ か を 、 ど の ヘ ッ ダ ー フ ァ イ ル の イ ン ク ル ー ド よ り も 前 で 行 わ な け れ ば な ら な い こ と を 意 味 す る 。
#define
_BSD_SOURCE
#define _XOPEN_SOURCE /* 500 未 満 の
任 意 の 値 */
別 の 方 法 と し て は 、 等 価 な 定 義 を コ ン パ イ ル 用 の コ マ ン ド で 指 定 す る こ と も で き る 。
cc
-D_BSD_SOURCE
cc -D_XOPEN_SOURCE # 500 未 満 の 任
意 の 値
後 で 述 べ る が 、 「 い く つ か の 機 能 検 査 マ ク ロ は デ フ ォ ル ト で 定 義 さ れ る 」 点 に 注 意 す る こ と 。 こ の た め 、 「 書 式 」 に 記 載 さ れ た 機 能 検 査 マ ク ロ を 常 に 明 示 的 に 指 定 す る 必 要 が あ る わ け で は な い 。
あ ま り 多 く な い が 、 マ ニ ュ ア ル ペ ー ジ に よ っ て は 、 機 能 検 査 マ ク ロ の 要 件 を 以 下 の よ う に 簡 単 な 表 現 で 記 載 す る 場 合 が あ る 。 (以 下 の 例 は readahead (2) の マ ニ ュ ア ル ペ ー ジ か ら の 引 用 で あ る )。
#define
_GNU_SOURCE
#include <fcntl.h>
ssize_t readahead(int fd , off64_t * offset , size_t count );
関 数 定 義 の 公 開 に 使 え る 機 能 検 査 マ ク ロ が 一 つ だ け で 、 デ フ ォ ル ト で は そ の マ ク ロ が 定 義 さ れ な い 場 合 に 、 こ の 形 式 の 表 現 を 利 用 す る 。
glibc が 解 釈 す る 機 能 検 査 マ ク ロ
以 下 で は 、 Linux glibc 2. x ( x > 0) に お い て 、 機 能 検 査 マ ク ロ が ど の よ う に 扱 わ れ る か を 説 明 す る 。
First, though a summary of a few details for the impatient:
|
* |
The macros that you most likely need to use in modern source code are _POSIX_C_SOURCE (for definitions from various versions of POSIX.1), _XOPEN_SOURCE (for definitions from various versions of SUS), _GNU_SOURCE (for GNU and/or Linux specific stuff), and _DEFAULT_SOURCE (to get definitions that would normally be provided by default). |
||
|
* |
Certain macros are defined with default values. Thus, although one or more macros may be indicated as being required in the SYNOPSIS of a man page, it may not be necessary to define them explicitly. Full details of the defaults are given later in this man page. |
||
|
* |
Defining _XOPEN_SOURCE with a value of 600 or greater produces the same effects as defining _POSIX_C_SOURCE with a value of 200112L or greater. Where one sees |
_POSIX_C_SOURCE >= 200112L
in the feature test macro requirements in the SYNOPSIS of a man page, it is implicit that the following has the same effect:
_XOPEN_SOURCE >= 600
|
* |
Defining _XOPEN_SOURCE with a value of 700 or greater produces the same effects as defining _POSIX_C_SOURCE with a value of 200809L or greater. Where one sees |
_POSIX_C_SOURCE >= 200809L
in the feature test macro requirements in the SYNOPSIS of a man page, it is implicit that the following has the same effect:
_XOPEN_SOURCE >= 700
Linux/glibc
は 以 下 の 機 能
検 査 マ ク ロ を
解 釈 す る :
__STRICT_ANSI__
ISO 標 準 の C。 gcc (1) を -std=c99 や -ansi な ど の フ ラ グ を 付 け て 起 動 し た 場 合 、 こ の マ ク ロ は 暗 黙 の う ち に 定 義 さ れ る 。
_POSIX_C_SOURCE
こ の マ ク ロ を 定 義 す る と 、 ヘ ッ ダ ー フ ァ イ ル で 以 下 の 定 義 が 公 開 さ れ る 。
|
• |
値 が 1 の 場 合 、 POSIX.1-1990 と ISO C (1990) に 準 拠 す る 定 義 が 公 開 さ れ る 。 |
||
|
• |
値 が 2 以 上 の 場 合 、 POSIX.2-1992 関 連 の 定 義 も 追 加 で 公 開 さ れ る 。 |
||
|
• |
値 が 199309 以 上 の 場 合 、 POSIX.1b (リ ア ル タ イ ム 拡 張 ) 関 連 の 定 義 が 追 加 で 公 開 さ れ る 。 |
||
|
• |
値 が 199506 以 上 の 場 合 、 POSIX.1c (ス レ ッ ド ) 関 連 の 定 義 が 追 加 で 公 開 さ れ る 。 |
||
|
• |
(glibc 2.3.3 以 降 ) 値 が 200112L 以 上 の 場 合 、 (XSI 拡 張 を 除 く ) POSIX.1-2001 基 本 仕 様 に 対 応 す る 定 義 も 追 加 で 公 開 さ れ る 。 ま た C95 (glibc 2.12 以 降 ) と C99 (glibc 2.10 以 降 ) の 機 能 も 公 開 さ れ る (言 い 換 え る と 、 _ISOC99_SOURCE を 定 義 す る の と 等 価 で あ る )。 |
||
|
• |
(glibc 2.10 以 降 ) 値 が 200809L 以 上 の 場 合 、 (XSI 拡 張 を 除 く ) POSIX.1-2008 基 本 仕 様 に 対 応 す る 定 義 が 追 加 で 公 開 さ れ る 。 |
_POSIX_SOURCE
こ の マ ク ロ は 廃 止 予 定 で あ る 。 こ の マ ク ロ が 定 義 さ れ る と 、 値 に 関 わ ら ず 、 _POSIX_C_SOURCE を 値 1 で 定 義 す る の と 等 価 と な る 。
Since this macro is obsolete, its usage is generally not documented when discussing feature test macro requirements in the man pages.
_XOPEN_SOURCE
こ の マ ク ロ を 定 義 す る と 、 ヘ ッ ダ ー フ ァ イ ル で 以 下 の 定 義 が 公 開 さ れ る 。
|
• |
ど ん な 値 で も 、 ヘ ッ ダ ー フ ァ イ ル で POSIX.1, POSIX.2, XPG4 に 準 拠 す る 定 義 が 公 開 さ れ る 。 |
||
|
• |
値 が 500 以 上 の 場 合 、 SUSv2 (UNIX 98) 関 連 の 定 義 が 追 加 で 公 開 さ れ る 。 |
||
|
• |
(glibc 2.2 以 降 ) 値 が 600 以 上 の 場 合 、 SUSv3 (UNIX 03; POSIX.1-2001 基 本 仕 様 + XSI 拡 張 と 同 じ ) 関 連 の 定 義 と C99 で の 定 義 が 追 加 で 公 開 さ れ る 。 |
||
|
• |
(glibc 2.10 以 降 ) 値 が 700 以 上 の 場 合 、 SUSv4 (POSIX.1-2008 基 本 仕 様 + XSI 拡 張 と 同 じ ) 関 連 の 定 義 が 追 加 で 公 開 さ れ る 。 |
__STRICT_ANSI__ が 定 義 さ れ て い な い 場 合 、 ま た は _XOPEN_SOURCE が 500 以 上 の 値 で 定 義 さ れ て い て 、 _POSIX_SOURCE も _POSIX_C_SOURCE も 明 示 的 に 定 義 さ れ て い な い 場 合 、 以 下 の マ ク ロ が 暗 黙 の う ち に 定 義 さ れ る 。
|
• |
_POSIX_SOURCE が 値 1 で 定 義 さ れ る 。 |
|||
|
• |
_POSIX_C_SOURCE は 、 _XOPEN_SOURCE の 値 に 基 づ い て 定 義 さ れ る 。 |
_XOPEN_SOURCE < 500
_POSIX_C_SOURCE が 値 2 で 定 義 さ れ る 。
500 <= _XOPEN_SOURCE < 600
_POSIX_C_SOURCE が 値 199506L で 定 義 さ れ る 。
600 <= _XOPEN_SOURCE < 700
_POSIX_C_SOURCE が 値 200112L で 定 義 さ れ る 。
700 <= _XOPEN_SOURCE (glibc 2.10 以 降 )
_POSIX_C_SOURCE が 値 200809L で 定 義 さ れ る 。
In addition, defining _XOPEN_SOURCE with a value of 500 or greater produces the same effects as defining _XOPEN_SOURCE_EXTENDED .
_XOPEN_SOURCE_EXTENDED
こ の マ ク ロ が 定 義 さ れ 、 さ ら に _XOPEN_SOURCE が 定 義 さ れ て い る と 、 XPG4v2 (SUSv1) UNIX 拡 張 (UNIX 95) に 対 応 す る 定 義 が 公 開 さ れ る 。 _XOPEN_SOURCE が 500 以 上 の 値 で 定 義 す る の は _XOPEN_SOURCE_EXTENDED を 定 義 す る の と 同 じ 効 果 と な る 。 新 し い ソ ー ス コ ー ド で _XOPEN_SOURCE_EXTENDED を 使 用 す る の は 避 け る べ き で あ る 。
Since defining _XOPEN_SOURCE with a value of 500 or more has the same effect as defining _XOPEN_SOURCE_EXTENDED , the latter (obsolete) feature test macro is generally not described in the SYNOPSIS in man pages.
_ISOC99_SOURCE (glibc 2.1.3 以 降 )
ISO C99 標 準 に 準 拠 し た 宣 言 を 公 開 す る 。
初 期 の バ ー ジ ョ ン 2.1.x の glibc で は 、 こ れ と 等 価 な _ISOC9X_SOURCE と い う 名 前 の マ ク ロ が 使 わ れ て い た (な ぜ な ら 、 C99 標 準 は ま だ 確 定 し て い な か っ た か ら で あ る )。 _ISOC9X_SOURCE マ ク ロ の 使 用 は 廃 止 さ れ て い る が 、 glibc は 過 去 と の 互 換 性 の た め 今 で も こ の マ ク ロ を 認 識 す る 。
_ISOC99_SOURCE を 定 義 す る と 、 ISO C (1990) Amendment 1 ("C95") の 定 義 も 公 開 さ れ る (C95 で の 主 要 な 変 更 点 は 国 際 化 文 字 集 合 の サ ポ ー ト で あ っ た )。
Invoking the C compiler with the option -std=c99 produces the same effects as defining this macro.
_ISOC11_SOURCE (glibc 2.16 以 降 )
ISO C11 標 準 に 準 拠 し た 宣 言 を 公 開 す る 。 こ の マ ク ロ を 定 義 す る と ( _ISOC99_SOURCE 同 様 ) C99 と C95 の 機 能 も 有 効 に な る 。
Invoking the C compiler with the option -std=c11 produces the same effects as defining this macro.
_LARGEFILE64_SOURCE
LFS (Large File Summit) に よ り "暫 定 拡 張 (transitional extension)" Single UNIX Specification と し て 規 定 さ れ た 代 替 API (alternative API) に 関 す る 定 義 を 公 開 す る ( http://opengroup.org/platform/lfs.html 参 照 )。 代 替 API は 新 規 オ ブ ジ ェ ク ト (関 数 と 型 ) の 集 合 で 構 成 さ れ 、 そ の 名 前 は "64" で 終 わ る (例 え ば 、 off_t に 対 応 す る の は off64_t 、 lseek () に 対 応 す る の は lseek64 () で あ る )。 新 し い プ ロ グ ラ ム で は こ の マ ク ロ を 利 用 し な い こ と 。 代 わ り に _FILE_OFFSET_BITS=64 を 利 用 す る こ と 。
_LARGEFILE_SOURCE
こ の マ ク ロ は 、 歴 史 的 に は 、 フ ァ イ ル オ フ セ ッ ト で long を 使 う 以 前 の API ( fseek (3) や ftell (3)) の 制 限 を 解 決 す る 関 数 (特 に fseeko (3) と ftello (3)) を 公 開 す る の に 使 わ れ て い た 。 こ の マ ク ロ は _XOPEN_SOURCE が 500 以 上 の 値 で 定 義 さ れ て い る 場 合 に 暗 黙 の う ち に 定 義 さ れ る 。 新 し い プ ロ グ ラ ム で は こ の マ ク ロ は 使 用 す べ き で は な い 。 _XOPEN_SOURCE を た だ 定 義 す る か 、 _FILE_OFFSET_BITS を 値 64 で 定 義 す る の が 、 同 じ 結 果 を 得 る た め の 推 奨 さ れ る 方 法 で あ る 。
_FILE_OFFSET_BITS
こ の マ ク ロ を 値 64 で 定 義 す る と 、 フ ァ イ ル I/O と フ ァ イ ル シ ス テ ム 操 作 に 関 連 す る 32 ビ ッ ト 版 の 関 数 と デ ー タ タ イ プ は 自 動 的 に 64 ビ ッ ト 版 に 変 換 さ れ る 。 こ れ は 、 32 ビ ッ ト シ ス テ ム で 大 き な フ ァ イ ル (> 2 ギ ガ バ イ ト ) の I/O を 実 行 す る 際 に 役 立 つ (こ の マ ク ロ を 定 義 す る と 、 コ ン パ イ ル し 直 す だ け で 大 き な フ ァ イ ル を 扱 え る プ ロ グ ラ ム を 書 く こ と が で き る )。
64 ビ ッ ト シ ス テ ム は 、 も と も と 2 ギ ガ バ イ ト よ り 大 き な フ ァ イ ル を 扱 え る の で 、 64 ビ ッ ト シ ス テ ム で は こ の マ ク ロ は 効 果 を 持 た な い 。
_BSD_SOURCE (glibc 2.20 以 降 で は 非 推 奨 )
こ の マ ク ロ を 定 義 す る と 、 値 に 関 わ ら ず 、 ヘ ッ ダ ー フ ァ イ ル で BSD 由 来 の 定 義 が 公 開 さ れ る 。
バ ー ジ ョ ン 2.18 以 前 の glibc で は 、 こ の マ ク ロ を 定 義 す る と 、 相 容 れ な い 標 準 が 存 在 す る 状 況 に お い て BSD 由 来 の 定 義 を 優 先 す る よ う に な る 。 た だ し 、 _SVID_SOURCE , _POSIX_SOURCE , _POSIX_C_SOURCE , _XOPEN_SOURCE , _XOPEN_SOURCE_EXTENDED , _GNU_SOURCE が 一 つ で も 定 義 さ れ た 場 合 に は 、 BSD 由 来 の 定 義 は 優 先 さ れ な く な る 。 glibc 2.19 以 降 で は 、 _BSD_SOURCE を 定 義 し て も 相 容 れ な い 標 準 が あ っ て も BSD 由 来 の 定 義 が 優 先 さ れ る こ と は も は や な く な っ た 。
glibc 2.20 以 降 で は 、 こ の マ ク ロ は 非 推 奨 で あ る 。 こ の マ ク ロ は 現 在 は _DEFAULT_SOURCE を 定 義 す る の と 同 じ 効 果 を 持 つ が 、 ( _DEFAULT_SOURCE が 合 わ せ て 定 義 さ れ て い な い 場 合 に は ) コ ン パ イ ル 時 の 警 告 が 出 る 。 代 わ り に _DEFAULT_SOURCE を 使 用 す る こ と 。 glibc 2.19 以 前 で _BSD_SOURCE が 必 要 で glibc 2.20 以 降 で _DEFAULT_SOURCE を 必 要 と す る プ ロ グ ラ ム を 警 告 を 出 さ ず に コ ン パ イ ル す る に は 、 _BSD_SOURCE と _DEFAULT_SOURCE の 両 方 を 定 義 す る こ と 。
_SVID_SOURCE (glibc 2.20 以 降 で は 非 推 奨 )
こ の マ ク ロ を 定 義 す る と (値 に 関 わ ら ず ) ヘ ッ ダ ー フ ァ イ ル で System V 由 来 の 定 義 が 公 開 さ れ る (SVID == System V Interface Definition; standards (7) 参 照 )。
glibc 2.20 以 降 、 _BSD_SOURCE と 同 様 に こ の マ ク ロ は 非 推 奨 と な っ て い る 。
_DEFAULT_SOURCE (glibc 2.19 以 降 )
こ の マ ク ロ を 使 う と 、 「 デ フ ォ ル ト 」 が 無 効 に な る よ う な 場 合 で も 「 デ フ ォ ル ト 」 の 定 義 が 提 供 さ れ る よ う に す る こ と が で き る 。 「 デ フ ォ ル ト 」 が 無 効 に な る よ う な 状 況 は 、 個 別 の マ ク ロ が 明 示 的 に 定 義 さ れ た 場 合 や 、 コ ン パ イ ラ が 「 標 準 」 モ ー ド の い ず れ か (例 え ば cc -std=c99 ) で 起 動 さ れ た 場 合 な ど で あ る 。 他 の 個 々 の マ ク ロ が 定 義 さ れ ず 、 コ ン パ イ ラ も 「 標 準 」 モ ー ド の い ず れ か を 指 定 し て 起 動 さ れ て い な い 場 合 は 、 _DEFAULT_SOURCE を 定 義 し て も 何 の 効 果 も な い 。
「 デ フ ォ ル ト 」 定 義 は 、 POSIX.1-2008 と ISO C99 で 必 須 と な っ て い る 定 義 と 、 も と も と は BSD と System V 由 来 の 種 々 の 定 義 を 公 開 す る 。 glibc 2.19 以 前 で は 、 こ れ ら の デ フ ォ ル ト は 以 下 を 明 示 的 に 定 義 す る の と ほ ぼ 等 価 で あ る 。
cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809
_ATFILE_SOURCE (glibc 2.4 以 降 )
こ の マ ク ロ を 定 義 す る と (値 に 関 わ ら ず ) ヘ ッ ダ ー フ ァ イ ル で 名 前 の 末 尾 が "at" の 各 種 の 関 数 の 定 義 が 公 開 さ れ る 。 openat (2) 参 照 。 glibc 2.10 以 降 で は 、 _POSIX_C_SOURCE が 200809L 以 上 の 値 で 定 義 さ れ た 場 合 に は 、 こ の マ ク ロ も 暗 黙 の う ち に 定 義 さ れ る 。
_GNU_SOURCE
こ の マ ク ロ を 定 義 す る と (値 に 関 わ ら ず ) 以 下 の マ ク ロ が 暗 黙 の う ち に 定 義 さ れ る : _ATFILE_SOURCE , _LARGEFILE64_SOURCE , _ISOC99_SOURCE , _XOPEN_SOURCE_EXTENDED , _POSIX_SOURCE , 値 200809L の _POSIX_C_SOURCE (バ ー ジ ョ ン 2.10 よ り 前 の glibc で は 値 は 200112L、 バ ー ジ ョ ン 2.5 よ り 前 の glibc で は 値 は 199506L、 バ ー ジ ョ ン 2.1 よ り 前 の glibc で は 値 は 199309L), 値 700 の _XOPEN_SOURCE (バ ー ジ ョ ン 2.10 よ り 前 の glibc で は 値 は 600、 バ ー ジ ョ ン 2.2 よ り 前 の glibc で は 値 は 500)。
glibc 2.19 以 降 で は 、 _GNU_SOURCE を 定 義 す る と 、 _DEFAULT_SOURCE も 暗 黙 の う ち に 定 義 さ れ る 。 バ ー ジ ョ ン 2.20 よ り 前 の glibc で は 、 _GNU_SOURCE を 定 義 す る と 、 _BSD_SOURCE と _SVID_SOURCE も 暗 黙 の う ち に 定 義 さ れ て い た 。
_REENTRANT
Historically, on various C libraries it was necessary to define this macro in all multithreaded code. (Some C libraries may still require this.) In glibc, this macro also exposed definitions of certain reentrant functions.
However, glibc has been thread-safe by default for many years; since glibc 2.3, the only effect of defining _REENTRANT has been to enable one or two of the same declarations that are also enabled by defining _POSIX_C_SOURCE with a value of 199606L or greater.
_REENTRANT is now obsolete. In glibc 2.25 and later, defining _REENTRANT is equivalent to defining _POSIX_C_SOURCE with the value 199606L. If a higher POSIX conformance level is selected by any other means (such as _POSIX_C_SOURCE itself, _XOPEN_SOURCE , _DEFAULT_SOURCE , or _GNU_SOURCE ), then defining _REENTRANT has no effect.
This macro is automatically defined if one compiles with cc -pthread .
_THREAD_SAFE
(非 推 奨 の ) _REENTRANT の 同 義 語 。 他 の い く つ か の 実 装 と の 互 換 性 を 提 供 す る た め の も の 。
_FORTIFY_SOURCE (glibc 2.3.4 以 降 )
Defining this macro causes some lightweight checks to be performed to detect some buffer overflow errors when employing various string and memory manipulation functions (for example, memcpy (3), memset (3), stpcpy (3), strcpy (3), strncpy (3), strcat (3), strncat (3), sprintf (3), snprintf (3), vsprintf (3), vsnprintf (3), gets (3), and wide character variants thereof). For some functions, argument consistency is checked; for example, a check is made that open (2) has been supplied with a mode argument when the specified flags include O_CREAT . Not all problems are detected, just some common cases.
_FORTIFY_SOURCE が 1 に 設 定 さ れ た 場 合 、 コ ン パ イ ラ の 最 適 化 レ ベ ル が 1 ( gcc -O1 ) か そ れ 以 上 で あ れ ば 、 規 格 に 準 拠 す る プ ロ グ ラ ム の 振 る 舞 い を 変 化 さ せ な い よ う な チ ェ ッ ク が 実 行 さ れ る 。 _FORTIFY_SOURCE が 2 に 設 定 さ れ た 場 合 、 さ ら な る チ ェ ッ ク が 追 加 さ れ る が 、 規 格 に 準 拠 す る プ ロ グ ラ ム の い く つ か が 失 敗 す る 可 能 性 が あ る 。
い く つ か の チ ェ ッ ク は (ヘ ッ ダ ー フ ァ イ ル に 実 装 さ れ た マ ク ロ の ロ ジ ッ ク に よ り ) コ ン パ イ ル 時 に 実 行 で き 、 コ ン パ イ ラ の 警 告 と し て 表 示 さ れ る 。 他 の チ ェ ッ ク は 実 行 時 に 行 わ れ 、 チ ェ ッ ク に 失 敗 し た 場 合 に は 実 行 時 エ ラ ー と な る 。
こ の マ ク ロ を 使 用 す る に は コ ン パ イ ラ の 対 応 が 必 要 で あ り 、 バ ー ジ ョ ン 4.0 以 降 の gcc (1) で 利 用 で き る 。
デ フ ォ ル ト の 定 義 、 暗 黙 の 定 義 、 組 み 合 わ せ 定 義
機 能 検 査 マ ク ロ が 一 つ も 明 示 的 に 定 義 さ れ な か っ た 場 合 、 デ フ ォ ル ト で 機 能 検 査 マ ク ロ _BSD_SOURCE (glibc 2.19 以 前 ), _SVID_SOURCE (glibc 2.19 以 前 ), _DEFAULT_SOURCE (glibc 2.19 以 降 ), _POSIX_SOURCE , _POSIX_C_SOURCE =200809L が 定 義 さ れ る (バ ー ジ ョ ン 2.10 よ り 前 の glibc で は 値 は 200112L、 バ ー ジ ョ ン 2.4 よ り 前 の glibc で は 値 は 199506L、 バ ー ジ ョ ン 2.1 よ り 前 の glibc で は 値 は 199309L)。
__STRICT_ANSI__ , _ISOC99_SOURCE , _ISOC11_SOURCE (glibc 2.18 以 降 ), _POSIX_SOURCE , _POSIX_C_SOURCE , _XOPEN_SOURCE , _XOPEN_SOURCE_EXTENDED (glibc 2.11 以 前 ), _BSD_SOURCE (glibc 2.19 以 前 ), _SVID_SOURCE (glibc 2.19 以 前 ) の い ず れ か が 明 示 的 に 定 義 さ れ た 場 合 、 _BSD_SOURCE , _SVID_SOURCE , _SVID_SOURCE は デ フ ォ ル ト で は 定 義 さ れ な い 。
_POSIX_SOURCE と _POSIX_C_SOURCE が 明 示 的 に 定 義 さ れ な い 場 合 で 、 __STRICT_ANSI__ が 定 義 さ れ な い 、 も し く は _XOPEN_SOURCE が 500 以 上 の 値 で 定 義 さ れ た と き に は 、
|
* |
_POSIX_SOURCE が 値 1 で 定 義 さ れ 、 か つ |
|||
|
* |
_POSIX_C_SOURCE は 以 下 の 値 の い ず れ か 一 つ で 定 義 さ れ る 。 |
•
|
2 ( _XOPEN_SOURCE が 500 未 満 の 値 で 定 義 さ れ た 場 合 ) |
|||
|
• |
199506L ( _XOPEN_SOURCE が 500 以 上 600 未 満 の 値 で 定 義 さ れ た 場 合 ) |
||
|
• |
(glibc 2.4 以 降 ) 200112L ( _XOPEN_SOURCE が 600 以 上 700 未 満 の 値 で 定 義 さ れ た 場 合 ) |
||
|
• |
(glibc 2.10 以 降 ) 200809L ( _XOPEN_SOURCE が 700 以 上 の 値 で 定 義 さ れ た 場 合 ) |
||
|
• |
古 い バ ー ジ ョ ン の glibc で は _POSIX_C_SOURCE の 値 と し て 200112L や 200809L は 存 在 せ ず 、 _POSIX_C_SOURCE の 値 が ど う な る か は glibc の バ ー ジ ョ ン に よ り 異 な る 。 |
||
|
• |
_XOPEN_SOURCE が 未 定 義 の 場 合 、 _POSIX_C_SOURCE の 値 は glibc の バ ー ジ ョ ン に よ り 異 な る 。 バ ー ジ ョ ン 2.4 よ り 前 の glibc で は 199506L、 バ ー ジ ョ ン 2.4 以 降 2.9 未 満 で は 200112L、 glibc 2.10 以 降 で は 200809L と な る 。 |
ま た 、 複 数 の マ ク ロ を 定 義 す る こ と も で き る 。 こ の 場 合 、 定 義 し た マ ク ロ は す べ て 有 効 に な る 。
準 拠
POSIX.1 で は _POSIX_C_SOURCE , _POSIX_SOURCE , _XOPEN_SOURCE が 規 定 さ れ て い る 。
_XOPEN_SOURCE_EXTENDED は XPG4v2 (別 名 SUSv1) で 規 定 さ れ て い た が 、 SUSv2 以 降 に は 存 在 し な い 。 _FILE_OFFSET_BITS は ど の 標 準 で も 規 定 さ れ て い な い が 、 他 の い く つ か の 実 装 で 採 用 さ れ て い る 。
_BSD_SOURCE , _SVID_SOURCE , _DEFAULT_SOURCE , _ATFILE_SOURCE , _GNU_SOURCE , _FORTIFY_SOURCE , _REENTRANT , _THREAD_SAFE は Linux (glibc) 固 有 で あ る 。
注 意
<features.h> は Linux/glibc 固 有 の ヘ ッ ダ ー フ ァ イ ル で あ る 。 他 の シ ス テ ム に も 同 様 の 目 的 の フ ァ イ ル が あ る が 、 普 通 は 違 う 名 前 で あ る 。 こ の ヘ ッ ダ ー フ ァ イ ル は 、 他 の ヘ ッ ダ ー フ ァ イ ル に よ り 必 要 に 応 じ て 自 動 的 に イ ン ク ル ー ド さ れ る 。 機 能 検 査 マ ク ロ を 利 用 す る た め に 明 示 的 に イ ン ク ル ー ド す る 必 要 は な い 。
上 記 の 機 能 検 査 マ ク ロ の う ち ど れ が 定 義 さ れ た か に し た が っ て 、 <features.h> は 、 他 の glibc ヘ ッ ダ ー フ ァ イ ル で チ ェ ッ ク さ れ る 各 種 の 他 の マ ク ロ を 、 内 部 で 定 義 す る 。 こ れ ら の マ ク ロ の 名 前 は ア ン ダ ー ス コ ア 2つ で 始 ま る (例 え ば __USE_MISC )。 ユ ー ザ ー プ ロ グ ラ ム は こ れ ら の マ ク ロ を 決 し て 直 接 定 義 す べ き で は な い 。 代 わ り に 、 上 記 の リ ス ト に あ る 適 切 な 機 能 検 査 マ ク ロ を 利 用 す べ き で あ る 。
例
下 記 の プ ロ グ ラ ム を 使 う と 、 各 種 の 機 能 検 査 マ ク ロ が glibc の バ ー ジ ョ ン に 応 じ て ど の よ う に 設 定 さ れ る か や 、 ど の 機 能 検 査 マ ク ロ が 明 示 的 に 設 定 さ れ る か 、 を 調 べ る こ と が で き る 。 以 下 に 示 す シ ェ ル セ ッ シ ョ ン は 、 glibc 2.10 の シ ス テ ム で の 実 行 結 果 の 例 で あ る 。
$
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);
}
関 連 項 目
libc (7), standards (7), system_data_types (7)
info libc の "Feature Test Macros" の 節 。
/usr/include/features.h
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。