アカウント名:
パスワード:
実装なのか想像するスレ
"Because of incorrect casting" と書いてありますね。
memcmp の戻り値を char に変換した上で 0 と比較してるんじゃないでしょうか。memcmp の戻り値は、一致の場合0、違う場合は正または負の整数ですが、0じゃない整数を char に変換すると 1/256 の確率で 0 になって一致したことになると。この場合、戻り値の整数値に 1 または -1 しか使わないような実装の memcmp なら問題は生じないので、実装によっては大丈夫という理由も説明できます。
未初期化変数返してるんじゃないかな。一致した時だけ0を入れてて、そうでないときは何もしてないとか。
typedef char BOOL;とかやってるとはまりそうですね。
SSE最適化版のみってことだからマルチバイトで比較して memcmp から結果を返す前に char にキャストしてんじゃないかな。
わざわざ、なんでキャスト?っておもってみたらcharを返す関数でmemcmpの戻り値そのままreturnで返してるんですね。こんなキャストなら俺もミスするかも
それキャストじゃなくて暗黙の型変換じゃん。型変換を何でもかんでもキャストと呼ぶバカは爆発しろ。ってMySQLの開発者が言ってんのか。深刻すぎる
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
開いた括弧は必ず閉じる -- あるプログラマー
どういう (スコア:0)
実装なのか想像するスレ
Re:どういう (スコア:2, 参考になる)
"Because of incorrect casting" と書いてありますね。
memcmp の戻り値を char に変換した上で 0 と比較してるんじゃないでしょうか。memcmp の戻り値は、一致の場合0、違う場合は正または負の整数ですが、0じゃない整数を char に変換すると 1/256 の確率で 0 になって一致したことになると。この場合、戻り値の整数値に 1 または -1 しか使わないような実装の memcmp なら問題は生じないので、実装によっては大丈夫という理由も説明できます。
Re:どういう (スコア:1)
未初期化変数返してるんじゃないかな。
一致した時だけ0を入れてて、そうでないときは何もしてないとか。
スルースキル:Lv2
Keep It Simple, Stupid!
Re: (スコア:0)
typedef char BOOL;
とかやってるとはまりそうですね。
Re: (スコア:0)
SSE最適化版のみってことだからマルチバイトで比較して memcmp から結果を返す前に char にキャストしてんじゃないかな。
Re: (スコア:0)
わざわざ、なんでキャスト?っておもってみたら
charを返す関数でmemcmpの戻り値そのままreturnで返してるんですね。
こんなキャストなら俺もミスするかも
Re: (スコア:0)
それキャストじゃなくて暗黙の型変換じゃん。型変換を何でもかんでもキャストと呼ぶバカは爆発しろ。ってMySQLの開発者が言ってんのか。深刻すぎる