我在项目代码中遇到编译错误,情况如下:
typedef unsigned int U32bit;
typedef unsigned long long U64bit;
U32bit var;
U64bit var2;
var = function(); /* Function returns a 32-bit value, which is stored in var */
var2 = 100*var1; /* 100*var1 is very Big & can be stored only in U64bit variable */
For the Above Line: var2 = 100*var1
我在Solaris上遇到以下编译错误:
"conversion to non-scalar type requested"
我也尝试过类型转换:
var2 = (U64bit) 100*var1;
这也会产生同样的错误。
答案 0 :(得分:2)
什么是U64bit
?这是一种非标准类型,因此您必须显示其声明。
听起来好像是struct
。
答案 1 :(得分:2)
C中的标准固定宽度整数类型为uint32_t
和uint64_t
,请尝试使用这些。然后可以使用UINT64_C(100)
定义该类型的常量。
要拥有这些类型,您可能需要添加
#include <stdint.h>
到您的包含。
答案 2 :(得分:0)
你确定这种类型的“U64bit”实际上是一个整数吗?如果不是,那可能是问题,它可能是struct
,它是标量类型。
您也没有指定您使用的编译器或操作系统。如果它符合C标准,那么您应该#include <stdint.h>
并使用uint32_t
和uint64_t
而不是U32bit
和U64bit
。
答案 3 :(得分:0)
尝试以下方法:
var2 = (U64bit)var1 * 100;
修改强>
也许
var2 = (U64bit)var1 * 100LL;
无论如何,U32Bit
,U64Bi
t和function
的声明都会有用。