[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00818] Re: 標準の関数をどこまで仮定するか。
小野寛生です
ちょっと考え直しました。ライブラリ関数よりヘッダの話になっていますが。
> At Sun, 27 Jan 2002 03:32:21 JST,
> Tomoki AONO wrote:
> > C89(いわゆるANSI-C)の文法はgccがあるので仮定してもよいかと
> > 思うのですが、関数まで仮定するのはちょっとやりすぎかという
> > 気がします。
> > #確かにそういう関数もないlibcを持つシステムでは運用しない
> > #だろう、という気もするのですが。
At Fri, 01 Feb 2002 23:49:13 +0900,
Hiroo Ono wrote:
> プロトタイプなど、書き方は積極的に C89 に従って書き換えてゆく。
> 関数も使うことにして、どこかから文句がきたらそのとき考える。
> SUSv2 とか BSD とかな関数を使う場合は configure で存在試験をする。
> 実際に問題が報告されるまでは、ない時は代替処理は考えずに失敗にしてよい。
>
> というところでどうでしょう?
% "→" は私の意見です。
C89 にあるヘッダ
・FreeWnn 1.1 で無条件で include しているもの
→ チェックせずに include
stdio.h ctype.h errno.h setjmp.h signal.h
あと、include されていませんが、必要なら assert.h も。
・FreeWnn 1.1 でチェックしている or include していない。
→ HAVE_STDC_HEADERS を使う。
上述したもの以外ということで、
float.h limits.h locale.h math.h stdarg.h stddef.h stdlib.h
string.h time.h
% time.h は一箇所ありましたが。
C89 にある関数
・bsearch() 関数 (これは消しましたが) など、C89 な関数を定義している場合。
消してしまってもよいか、チェックしてなければつかうか…。
→ 消す (それとも、FUNCTION.c に分けて、AC_FUNC_REPLACE とかします?)
・使う場合 → ない場合の代替処理は考えずに使って良い。
posix.2 にあるヘッダ/関数
・FreeWnn 1.1 で無条件 includeしているもの
→ とりあえずそのまま。
・FreeWnn 1.1 でチェックしている or 使っていない。
→ 存在をチェックして使う。
ない場合は……どうしましょう。
すぐにやって良いとおもうものは、
(1) unistd.h は存在チェックして include
POSIX.1 互換かどうか調べます?
(2) string.h / strings.h
#if STDC_HEADERS
# include <string.h>
#elsif HAVE_STRINGS_H
# include <string.h>
#endif
以上はこのあと変更をかけてしまいます。
(私が) 混乱してしまっているので、こういった話はそのうちどこかにまとめ
るつもりです。
一応、FreeWnn 1.1 でざっと調べてみました。
無条件で include されているもの:
C89 の標準ヘッダ
stdio.h: たくさん
ctype.h: たくさん
errno.h: jlib/js.c jserver/de.c jserver/error.c uum/cursor.c
setjmp.h: conv/cvt_key.c include/jlib.h,jsib.h
signal.h: conv/cvt_key.c include/wnn_os.h jlib/js.c jserver/de.c
jserver/error.c uum/jhlp.c
time.h: jserver/error.c
それ以外
pwd.h: jlib/jl.c,js.c jserver/error.c uum/jhlp.c uum/prologue.c
uum/setutmp.c uum/wnnrc_op.c
utmp.h: uum/setutmp.c
sys/errno.h: uum/jhlp.c uum/prologue.c uum/termcap.c uum/wnnrc_op.c
sys/file.h: include/wnn_os.h jlib/jl.c jutil/wdreg.c
sys/ioctl.h: jserver/de.c uum/jhlp.c
sys/socket.h: include/jd_sock.h
sys/stat.h: etc/bdic.c jlib/js.c jserver/do_filecom.c
sys/time.h: uum/jhlp.c
sys/types.h: include/wnn_os.h jlib/jl.c jserver/do_filecom.c
jutil/wdreg.c uum/jhlp.c uum/setutmp.c
% uum が include するのは、sys/errno.h → errno.h とすべきですね。
なにかしらコンパイル時に条件判定して include しているもの。
string(s).h: conv/cvt_read.c etc/yincoding.c include/wnn_os.h
jlib/jl.c uum/wnnrc_op.c
fcntl.h: conv/cvt_read.c include/wnn_os.h jlib/js.c uum/jhlp.c
uum/setutmp.c
curses.h: conv/cvt_read.c include/wnn_os.h
term.h: conv/cvt_read.c include/wnn_os.h
sys/types.h: etc/bdic.c jlib/js.c
unistd.h: include/commonhd.h uum/prologue.c
X11/Xos.h: include/jd_sock.h jlib/js.c
sys/un.h: include/jd_sock.h
net/in.h: include/jd_sock.h
netinet/in.h: include/jd_sock.h
net/netdb.h: include/jd_sock.h
netdb.h: include/jd_sock.h
sys/param.h: jserver/de.c
sys/termio.h: jserver/de.c
sys/kdef.h: uum/jhlp.c
memory.h: uum/setutmp.c
sys/ioctl.h: uum/termcap.c
uum/termio.c: stdio.h curses.h term.h
uum/ttyfdslot.c: stdio.h
% string(s).h は string.h / strings.h 両方のことです。