Delphi W1050 set 式で WideChar がバイト char に縮小されました
Delphi で
「W1050 set 式で WideChar がバイト char に縮小されました。'SysUtils' ユニットの 'CharInSet' 関数で使用することを検討してください。」
なる警告
こういった関数を作成すると出現するエラー
function CharInSetEx(C: WideChar; CharSet: TSysCharSet): Boolean; begin Result := C in CharSet; // Result := System.SysUtils.CharInSet(C, CharSet); end; CharInSetEx('あ', ['あ', 'A'])CharInSet とか関係なく、この関数に入った時点で 配列 CharSet の値が 0-255 に丸められてしまうため、 ASCII以外の文字列を 変数CharSetへ与えてもヒットしない
これは TSysCharSet の定義(set of AnsiChar)である、集合型が0-255の範囲しか利用できないことに由来しています
この場合 array of WideChar を使用して同様の引数で WideChar の処理を行うことが可能です(サロゲートペア除く)
ただし、CharSet: array of WideChar = ['A'] のようなデフォルト引数を利用することは不可能になります(overloadで同様の事が可能な場合があります)
function CharInSetEx(C: WideChar; CharSet: array of WideChar): Boolean; begin Result := System.WideStrUtils.InOpArray(C, CharSet); end; CharInSetEx('あ', ['あ', 'A'])
コメント