簡體   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