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作为编译器。 海湾合作委员会和Visual Studio已经编好了这段代码。
可能watcom希望这种转换在运行时完成。这实际上不是可移植的,即使这个平台碰巧有32位宽的指针,不同的编译器以不同的方式处理这些代码。我们可以尝试找到解决这个问题的方法,但是另一个编译器会遇到另一个问题,或者下一个版本的GCC或Visual Studio的下一个版本...... –
它是全局的还是本地的(以及非静态的)变量?你有没有尝试过两次转换值(到uint32_t,然后到uint64_t)? – keltar
这些都是全局变量(我刚刚编辑了问题以添加此信息)。我曾尝试转换两次,但我得到了同样的错误。 –