[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freewnn:00055] Re: malloc define (Re: configure for HP-UX and OpenBSD)



 元木@ITLです。

In article <199908111649.BAA27012@pop1.ngy.3web.ne.jp>
    frkwtto@osk3.3web.ne.jp (Tatsuo Furukawa) writes:

| 矢吹さん> 現在の configure で ANSI C 準拠のヘッダがあるかどうかチェッ
| 矢吹さん> クしてるので(autoconf のマクロだと AC_HEADER_STDC)、その結果
| 矢吹さん> 定義される STDC_HEADERS で判定するというのはどうでしょうか?
| 矢吹さん> STDC_HEADERS が 1 に定義されていれば、stdlib.h で宣言されて
| 矢吹さん> いるはずなので、ソースコードでは malloc() の宣言は行なわない
| 矢吹さん> と。

| もし、古いCコンパイラしかないような OS に対応しなければならない場合は、
| それ専用のヘッダファイルを読み込むようにしておくという逃げ道を用意して
| おくということで。

 これって autoconf 等の考え方である(と私は思っている)、OS単
 位ではなく、もっと細かい単位で判定することによって、ポータ
 ビリティを上げようって考え方に対して思いっきり逆走してない
 でしょうか ^^;

 今出ている例は、古いコンパイラ対策の話ですが、システムにちょっ
 とでも近いレベルになると結局 OS ごとの差がある場合があると
 思います。
 (しかも、どれが標準と言いがたい場合もあると思います。)

 そういう問題が出てきた時に、OSごとのヘッダーファイルで対応
 だと同じ問題を抱える OS に対しての処置は取られないことにな
 りますよね?

 そういうのって、とっても悲しいと思うのですが....

# 逆に問題を持ち込むケースもあると思いますが。

| 私としてはできるだけ標準にのっとったソースコードにしたいです。非標準な 
| OS のためにソースコードをややこしくすることはしたくない。でも頭に 
| #include 文がいっぱいつくぐらいなら許してやってもいいかな。

 ぜひ、許して下さい (^^;

| 例えば bcopy() じゃなくて memcpy() を使うという風に。んで、memcpy() の
| ない OS があったら、その OS 専用のヘッダファイルに memcpy を bcopy に 
| #define するような記述を埋め込んでおく。

 wnn_os.h あたりに以下を突っ込むとかもだめでしょうか?

 (autoconf の infoより。)
#if STDC_HEADERS
# include <string.h>
#else
# ifndef HAVE_STRCHR
#  define strchr index
#  define strrchr rindex
# endif
char *strchr (), *strrchr ();
# ifndef HAVE_MEMCPY
#  define memcpy(d, s, n) bcopy ((s), (d), (n))
#  define memmove(d, s, n) bcopy ((s), (d), (n))
# endif
#endif

sin.