[英]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作为编译器。 Gcc和Visual Studio已编译好这段代码。
必须使用常量值初始化全局变量。 我想watcom不相信你的值实际上是常量(也许它对于编译时计算是不好的)。
您可以尝试破解您的编译器(例如将其转换为uint32_t,然后可能会发生自动转换;或者某些技巧,无法保证)或将数组初始化移出静态(例如将其移动到您调用的init
函数) main
开始)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.