From: EGUCHI Osamu Date: 1999-01-21T22:51:49+09:00 Subject: [ruby-dev:4315] Re: signed/unsigned char えぐち@エスアンドイー です。 >>> On Thu, 21 Jan 1999 11:43:05 +0900, Motoyuki Kasahara said: 笠原> 笠原です。 笠原> SunOS 4.1.3 では 笠原> 笠原> strcmp() and strncmp() use native character comparison, 笠原> which is signed on the Sun, but may be unsigned on other 笠原> machines. Thus the sign of the value returned when one of 笠原> the characters has its high-order bit set is 笠原> implementation-dependent. 笠原> 笠原> と書いてあって、出力結果は 2 になります。引用した Sun の man page では 笠原> `implementation-dependent' と書いてあります。 なのですが、 SunOS 4.1.4-JLE の man strcmp では、 【警告】 関数 strcmp() と strncmp() はオリジナル Sun OS のものと異 な り、 unsigned で比較が行なわれます。 ( オリジナル SunOS で は、 signed で比較されます。) signed での比較結果でのみ正 し く動作するようなプログラムは、書き直しが必要です とあり、『書き直しが必要です』はグッと来ますね ^^; #これから、動作環境を報告する時は、JLE を明記しなければ、、 笠原> 一応、ISO/IEC 9899/1990 笠原> `Programming Languages - C' の `7.11.4.2 The strcmp function' を見てみ 笠原> ましたが、比較を符号なしと符号ありのどちらで行うのかという記述はありま 笠原> せん。 いま ruby のソースをざっと見たところでは、 strcmp() の戻り値の 符合は、#sort に関係ありそうな事と、 strcmp() だけでなく memcmp() も 符合に関して、処理依存だと言う事に気が付きました。 どのことが、どんな問題を起こすのか(あるいは、起こさないのか)は 検証が必要かも知れません。 私は、『Ruby の文字は符合付き』を仕様化してまうのが、 潔いと思います。 で、strcmp() 相当の関数を自前で用意してしまうと、、 、、どんなもんでしょうか? えぐち