2013-10-02 69 views
0

一塊的自動生成的Ada代碼空範圍具有這一行:扭轉阿達

for digit in reverse 0 .. 1 loop 
     ... 
end loop; 

導致蚋ADA發射:

sourcefile.adb:79:41:警告:環範圍可以爲null
sourcefile.adb:79:41:警告:邊界可能是南轅北轍

是與執行的循環什麼位= 1,則位= 0 ...但0..1 一個零範圍,所以反轉它仍然產生一個零範圍,對吧?還是它?

回答

2

你使用的是什麼Ada編譯器和版本?

這將編譯沒有警告或錯誤使用GNAT GPL 2013:

with Ada.Text_IO; use Ada.Text_IO; 

procedure Reverse_Loop_Test is 

begin 
    for Digit in reverse 0 .. 1 loop 
     Put_Line(Integer'Image(Digit)); 
    end loop; 
end Reverse_Loop_Test; 

而且運行正常:

/home/wintermute/sandbox/reverse_loop_test 
1 
0 
[2013-10-02 19:42:24] process terminated successfully (elapsed time: 00.10s) 
+0

Marc:你的示例產生了我的OP的警告。 「gnat --version」給出:「GNAT 4.5.4 版權所有1996-2010,Free Software Foundation,Inc.」所以看起來我必須更新。但是我在Gentoo Linux上,版本是最新的,所以我必須自己下載/構建gnat。雖然,輸出與你的一樣。 – Michael

1

我想是與數字= 1來執行循環那麼數字= 0 ...但0..1是零範圍,所以反轉它仍然產生一個空的 範圍,對吧?還是它?

0..1不是零範圍。它是整數{0,1}的集合 - 您想要的的零範圍是1..0,所以我會問你編譯的文件是否真的是你認爲正在編譯的文件。

+0

Doh,我的粗心大意和道歉:代碼片段是正確的,我的評論/問題是錯誤的。請參閱我對Marc C的回答的評論。 – Michael

+0

@Michael Small FYI:StackOverflow不會每次都以相同的順序顯示答案,因此使用「below」之類的詞不是一個好主意。 – ajb