0
我有矩陣聲明實現如下:錯誤地址
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作爲編譯器。 海灣合作委員會和Visual Studio已經編好了這段代碼。
可能watcom希望這種轉換在運行時完成。這實際上不是可移植的,即使這個平臺碰巧有32位寬的指針,不同的編譯器以不同的方式處理這些代碼。我們可以嘗試找到解決這個問題的方法,但是另一個編譯器會遇到另一個問題,或者下一個版本的GCC或Visual Studio的下一個版本...... –
它是全局的還是本地的(以及非靜態的)變量?你有沒有嘗試過兩次轉換值(到uint32_t,然後到uint64_t)? – keltar
這些都是全局變量(我剛剛編輯了問題以添加此信息)。我曾嘗試轉換兩次,但我得到了同樣的錯誤。 –