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

时间:2014-03-24 17:55:20

标签: c watcom

我的矩阵声明实现如下:

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 作为编译器。 Gcc Visual Studio 已编译好此代码。

1 个答案:

答案 0 :(得分:2)

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

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