[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 両方のことです。


http://www.freewnn.org/ FreeWnn Project