[英]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.