次のコードを検討してください。
unsigned int var1 = 4294967295;
unsigned int var2 = 1000000;
unsigned int var3;
var3 = some_expression - (var1*var2)/some_expression;
バグ:
var3 の式の値:
(var1*var2) は 32 ビット整数に切り捨てられます (2 つの 32 ビット整数を乗算して取得されるため)。
考えられる修正:
var3 = some_expression - ((unsigned long int)var1*var2)/some_expression;
問題:
Solarisはこの型キャストを受け入れず、次のエラーをスローします。
「非スカラー型への変換が要求されました」
型キャストせずにこの問題を修正できますか?