Closed tsutsui closed 4 weeks ago
Makefile
で指定せずにnanotodon.c
の中で#ifdef __GNU_LIBRARY__
すればいいじゃん、
これはそのうちやってもいいかもですね、とりあえずこれはこれでマージします(度々調査ありがとうございます)
_BSD_SOURCE
の出どころは調べてませんが 4.4BSD にはなさそう。386BSD から?
こんなところに書くなという話ですが、一応調べたのでメモ:
_POSIX_SOURCE
といった定義が NetBSD に入り始めたのは 1995年ごろ?
https://github.com/NetBSD/src/commit/a134771cd6bd05d33437f7fd31a787c0ad7c4bf3
_XOPEN_SOURCE
や _POSIX_C_SOURCE
に対して各ヘッダでそのまま参照せずに
__POSIX_VISIBLE
といった内部表記を使うようにしたのが 2002年
https://github.com/freebsd/freebsd-src/commit/3d7dd7e8b8302dc09813d3d80727d06b8eb6d913
_NETBSD_SOURCE
の定義を導入して「なんでもあり」仕様を定義できるようにしたのが2003年
https://github.com/NetBSD/src/commit/4be7a2dcf395bcf0739f131315b64970d74b265e
__POSIX_VISIBLE
様式の定義と _OPENBSD_SOURCE
を導入したのが 2005年5月
https://github.com/openbsd/src/commit/985064f4447a3e9eba5e8aa390af40d870492a9b _OPENBSD_SOURCE
を _BSD_SOURCE
に変更
https://github.com/openbsd/src/commit/431045e8b96f00cdfe3ad00cae059bf4e15e90fa
_BSD_SOURCE
を deprecated にして _GNU_SOURCE
に変えてしまったので
実質意味なし状態? (せめて合わせて _DEFAULT_SOURCE
にしてくれればよいのに)
Both NetBSD and OpenBSD don't require these unless any strict definitions like _POSIX_C_SOURCE and _XOPEN_SOURCE etc. are specified.
もともと今の定義は私が適当に提案したという問題がありますが、 CIをかけるならば本質的な警告が紛れないように余計な警告は消したい、となって、 OpenBSD と FreeBSD でも問題ないようなので投げておきます。
結論からすると、 GNU拡張の
timegm(3)
と XPG4 のstrptime(3)
を両方使うには glibc の場合に_GNU_SOURCE
だけ定義すれば良い でいいかと。Linux (glibc2)
_XOPEN_SOURCE
等を定義すると、定義された関数定義が有効になる (つまり定義が広くなる方向)_GNU_SOURCE
を定義するとなんでもありになる_BSD_SOURCE
は過去の「なんでもあり」相当だったが glib 2.20 以降では非推奨NetBSD
_NETBSD_SOURCE
が定義されたのと等価でなんでもありになる_XOPEN_SOURCE
等を定義すると、定義された処理系の関数定義のみが有効になり、定義されていないものは使えなくなる (つまり定義が狭くなる方向)_XOPEN_SOURCE
が定義されていても GNU拡張の関数を使いたい場合は明示的に_NETBSD_SOURCE
を追加で定義する必要があるOpenBSD
_BSD_SOURCE
になってる以外は NetBSDと同じ感じ_BSD_SOURCE
の出どころは調べてませんが 4.4BSD にはなさそう。386BSD から?FreeBSD
_BSD_SOURCE
や_GNU_SOURCE
相当の「明示的になんでもあり」の定義はなさそうMakefile
で指定せずにnanotodon.c
の中で#ifdef __GNU_LIBRARY__
すればいいじゃん、 みたいな話もありますが、現状はソース内でのOS判定環境判定は無いようなので。