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

2

全局变量必须用常量值初始化。我猜 watcom 不相信您的值实际上是常量(也许编译时计算不好)。

您可以尝试破解您的编译器(例如将其转换为 uint32_t,然后可能会发生自动转换;或一些小技巧,这些都不能保证)或将数组初始化移出静态(例如,将它移到init您调用的函数中)的开头main)。

于 2014-03-24T18:21:02.983 回答