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、スカラー型である可能性があります。

また、使用しているコンパイラまたは OS も指定しません。C 標準に準拠している場合は、 andの代わりにand#include <stdint.h>を使用する必要があります。uint32_tuint64_tU32bitU64bit

于 2012-11-09T14:51:50.257 に答える
0

次のことを試してください。

var2 = (U64bit)var1 * 100;

編集

多分

var2 = (U64bit)var1 * 100LL;

とにかく、 for U32BitU64Bit 、および forの宣言はfunction役に立ちます。

于 2012-11-09T14:52:08.693 に答える