1xx
itsan****@gmail*****
2013年 8月 26日 (月) 21:14:05 JST
2013年8月26日 19:17 ishikawa <ishik****@yk*****>: > > env CC="c-compiler-program -D_XOPEN_SOURCE=550" ./configure > のようにして、コンパイルしてみたところ、(gcc-4.8 をコンパイラとして利用 > し、 make CCOPTIONS="-Werror -Wall" でコンパイル。) > > いくつか(多分これまでコンパイルされていなかった部分で?) 問題がみつかりま > した。 作業ご苦労様です。 そしてありがとうございます。 気になったところにだけcommentいたします。 > > その他 bzero(), bcopy(), bcmp(), rindex() が <strings.h> で定義されているの > に、<strings.h> が正しくinclude されない問題を発見、修正: > たとえば etc/bdic.c ですと次のような問題がありました: > 下にcpp でのinclude 部分を示しますが > 要は、STDC_HEADERSが定義されている、いないに関わらず strings.h があれば存在 > すれば > 問答無用でstrings.h をinclude すべきです。いくつか同じような問題をかかえた > ファイルを修正しました。(コンパイル時に警告がでないファイルは修正しきれてい > ません。INET6 などが定義されているとbcopy が使われるファイルなどは未修正のも > のもあるかもしれません。) bzero(), bcopy(), bcmp(), rindex() に関しては、おいおい memset(), memcpy(), memcmp(), strrchr()等に置き換えないといけないかなと 漠然と考えておりました。 > > ですが、gcc-4.8 の警告の不便なところは、if (a = b )のように、"=" 一つしかな > く、他に&& とか || がないにも括弧をつけろと警告されてしまいます。(上の実例 > (b) は ==がある事例) > テスト目的で -Wall -Werror をつけていたために、コンパイルが先にすすめず, こ > れを if ((a = b) ) のように修正してしまいましたが、あまりうれしくない変更です。 代入しながら比較するコードに関して、 数値ならif ((a = b) != 0) pointerならif ((a = b) != NULL) と私は書くことにしています。 但し、既にあるif (a = b)に関しては、可能な限り変更しないことにしています。 本当に代入したかったのか、比較したかっただけなのか即断できないからです。 > > PS: _XOPEN_SOURCE=550 は最初 650で定義しておこなったのですが、 > いくつかの関数が 600 以上では宣言、定義されないということがわかったので > 550に落したものです。数箇所かそれでもうまく宣言、定義されず > 無理矢理 __USE_BSD を局所的に 定義して宣言を取り込んでいるところがあります > が、_XOPEN_SOURCE は crypt() の利用に問題があったために定義したもので、他に > は大きな問題を与えてないはずです。 > (とりあえず jserver は動作してますし。) _XOPEN_SOURCEを定義すると宣言されなくなるのは、 多分、bcopy')系の関数ではないでしょうか? 先述したようにbcopy()系の関数は<string.h>の関数で 置き換えたら良いのかなと思っています。 -- 1xx <ItSAN****@gmail*****> <https://twitter.com/ItSANgo> <http://d.hatena.ne.jp/Itisango/>