0

我在项目代码中遇到编译错误,情况如下:

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;

这也给出了同样的错误。

4

4 回答 4

2

是什么U64bit?那是一个非标准类型,所以你必须显示它的声明。

听起来好像是一个struct

于 2012-11-09T14:52:10.877 回答
2

C 中的标准固定宽度整数类型是uint32_tuint64_t,请尝试使用这些类型。然后可以用 定义该类型的常量UINT64_C(100)

要拥有这些类型,您可能必须添加

#include <stdint.h>

到你的包括。

于 2012-11-09T14:53:39.470 回答
0

您确定这种类型“U64bit”实际上定义为整数吗?如果不是,那可能是问题所在,它可能struct是标量类型。

您也没有指定您正在使用哪个编译器或操作系统。如果它遵循 C 标准,您应该#include <stdint.h>使用uint32_tanduint64_t而不是U32bitand U64bit

于 2012-11-09T14:51:50.257 回答
0

尝试以下操作:

var2 = (U64bit)var1 * 100;

编辑

也许

var2 = (U64bit)var1 * 100LL;

无论如何,声明 for U32BitU64Bit 和 forfunction会很有用。

于 2012-11-09T14:52:08.693 回答