CheckSjisChar 関数の第2引数の型を int から size_t に変更 #1556
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR の目的
x64 ビルドで警告が出る数を減らす為の変更です。
カテゴリ
PR の背景
x64 のビルドで警告が大量に出る事が #430 で話されています。
PR のメリット
sakura
プロジェクトの x64 Debug ビルド時の警告の数が 607 から 605 になり、2個減ります。x64 Release ビルド時の警告の数が 572 から 570 になり、2個減ります。
Win32 Debug と Win32 Release ビルド時の警告の数は 0 のままです。
PR のデメリット (トレードオフとかあれば)
意識的に色々な型を使ってコードを書きたくない人にとってはコードの可読性は落ちると思います。
仕様・動作説明
関数の呼び出し元では
pr_end-pr
という記述でバッファ長を求めています。この演算の結果の型はいわゆるptrdiff_t
ですが、Win32 ビルドではint
なので元の実装でも警告は出ませんが、x64 ビルドではint64_t
相当なので引数の型がint
のままだとビット幅を狭めるデータ変換 (narrowing conversion) になり警告が出ます。なお呼び出し元における
pr_end
の値の作り方から考えて演算結果が負の値になる事はおそらく無いと考えています。これに関しては本当に負の値が生じない組み方になっているかをコンパイル時にきちんと検証はしていません(C++言語仕様的にどこまで出来るかは不明、可能だとしても形式的検証を取れる記述が容易とも思えない)。
boost::numeric_cast
のように実行時に確認するというのも選択肢に上がると思いますが、実行時エラーが絶対に許容されない用途向けのプログラムではないと思うので省きます。PR の影響範囲
CheckSjisChar
関数とそれを呼び出しているCESI::GetEncodingInfo_sjis
とCShiftJis::SjisToUni
です。CESI::GetEncodingInfo_sjis
の呼び出し元をたどっていくと日本語コードセット判定を行うCESI::CheckKanjiCode
になり、文字コード種別の判定で使われます。CShiftJis::SjisToUni
の呼び出し元をたどっていく文字コード変換処理になります。テスト内容
テスト1
README.md
ファイルを開くREADME.md
ファイルを文字コードセット SJIS でデスクトップに保存(ファイル > 名前を付けて保存)README.md
ファイルを開いて正常に読み込めることを確認するテスト2
README.md
ファイルを開くREADME.md
ファイルを開いて正常に読み込めることを確認する関連 issue, PR
#430 #1541 #1555