繁体   English   中英

创建具有内存地址的数组时出错

[英]Error when creating an array with memory addresses

我的矩阵声明实现如下:

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已编译好这段代码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM