-qinitauto
種類
@PROCESS
無。
用途
基於除錯目的,將未起始設定的自動變數起始設定為特定值。
語法
預設值
-qnoinitauto
依預設,編譯器不會將自動儲存體起始設定為任何特定值。 不過,儲存體區域可能包含全部零。
參數
- hex_value
- 1 到 8 位數的十六進位數。
- 如果您未指定 hex_value 數字,編譯器會將自動儲存體每一個位元組的值起始設定為零。
- 若要將每一個儲存體位元組起始設定為特定值,請為 hex_value指定 1 或 2 位數。 如果您只指定 1 位數,編譯器會以零來填補左側的 hex_value 。
- 若要將每個儲存單字起始設定為特定值,請為 hex_value指定 3 到 8 位數。 如果您指定大於 2 但小於 8 位數,編譯器會以零填補左側的 hex_value 。
- 在單字起始設定的情況下,如果自動變數的長度不是 4 個位元組的倍數,則 hex_value 可能會在左側截斷以適合。 例如,如果您為 hex_value 指定 5 位數,且自動變數長度只有 1 個位元組,則編譯器會截斷 hex_value 左側的 3 位數,並將兩個右側數字指派給變數。
- 您可以將英文字母數字指定為大寫或小寫。
用法
這個選項可協助您尋找在定義之前所參照的變數。 例如,同時使用 -qinitauto 選項來起始設定具有 NaNS 值的 REAL 變數及 -qflttrap 選項,即可在執行時期識別未起始設定 REAL 變數的參照。 在 XL Fortran 5.1.1版之前,您只能使用這個選項來起始設定儲存體的每一個位元組。
將 hex_value 設為零,可確保在使用之前清除所有自動變數。 部分程式假設變數已起始設定為零,且在未起始設定時無法運作。 如果其他程式未最佳化,但在最佳化時失敗,則其他程式可能可以運作。 一般而言,將所有變數設為所有零位元組會防止這類執行時期錯誤。 最好是在程式中找到需要歸零及插入程式碼的變數,而不是依賴此選項來為您執行。 使用此選項通常會將超出必要值的項目設為零,並可能導致程式變慢。
若要尋找並修正這些錯誤,請將位元組設為零以外的值,這將持續重新產生不正確的結果。 在新增除錯陳述式或將程式載入至符號式除錯器使錯誤消失的情況下,此方法特別有用。
將 hex_value 設為 FF (255) 會提供 REAL 及 COMPLEX 變數起始值 negative not a number
或 NaNQ。 這些變數上的任何作業也會產生 NaNQ 值,以明確指出在計算中已使用未起始設定的變數。
此選項可協助您對子程式中具有未起始設定變數的程式進行除錯。 例如,您可以使用它來起始設定具有 NaNS 值的 REAL 變數。 您可以透過指定 8 位數十六進位數 (重複時具有倍精準度 NaNS 值) ,將 8 位元組 REAL 變數起始設定為倍精準度 NaNS 值。 例如,您可以指定諸如 7FBFFFFF之類的數字,當儲存在 REAL(4) 變數中時,具有單一精準度 NaNS 值。 值 7FF7FFFF儲存在 REAL(4) 變數中時,具有單精準度 NaNQ 值。 如果相同的數字在 REAL(8) 變數中儲存兩次 (7FF7FFFF7FF7FFFF) ,則它具有倍精準度 NaNS 值。
限制
相等變數、結構元件及陣列元素不會個別起始設定。 相反地,整個儲存體序列會集體起始設定。
範例
subroutine sub()
integer(4), automatic :: i4
character, automatic :: c
real(4), automatic :: r4
real(8), automatic :: r8
end subroutine-qinitauto=0cf編譯器會以下列方式起始設定變數: 在 i4、 r4及 r8 變數的情況下,以零填補 hex_value ,並在 c 變數的情況下截斷第一個十六進位數字:| 變數 | 值 |
|---|---|
i4 |
000000CF |
c |
CF |
r4 |
000000CF |
r8 |
000000CF000000CF |
