0

次のように行列宣言を実装しています。

int var_porcenComun;
int var_porceninv;

uint32_t pointers[] = {
    (uint32_t)&var_porcenComun, 9999999,
    (uint32_t)&var_porceninv, 999999
};

これらはすべてグローバル変数です。このコードは正常にコンパイルされます。

基本的に、「ポインター」は、変数のアドレスと、それが保持することになっている最大値を保持します。

私の問題は、uint64_t として定義された新しい変数をこの行列に追加する必要があることです。私のプラットフォームのポインターのサイズは 32 ビットですが、変数のサイズのため、「ポインター」を uint64_t に変更する必要があります。しかし、私がするとき:

uint64_t pointers[] = {
    (uint64_t)&var_porcenComun, 9999999,
    (uint64_t)&var_porceninv, 999999
};

次のエラーが表示されます。

: Error! E1054: Expression must be constant

「ポインター」タイプを単に変更すると、このエラーが発生するのはなぜですか?

コンパイラとしてwatcom 1.3を使用しています。GccVisual Studioは、このコードをうまくコンパイルしました。

4

1 に答える 1