请考虑以下代码:
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不接受这种类型转换并引发以下错误:
“请求转换为非标量类型”
我可以在不进行类型转换的情况下解决此问题吗?