0

一段自动生成的 Ada 代码有这行:

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

这导致 gnat ada 发出:

sourcefile.adb:79:41:警告:循环范围可能为空
sourcefile.adb:79:41:警告:边界可能是错误的

想要的是用 digit = 1 然后 digit = 0 执行循环......但是 0..1一个空范围,所以反转它仍然会产生一个空范围,对吗?或者是吗?

4

2 回答 2

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)
于 2013-10-03T00:44:02.960 回答
1

我想要的是用 digit = 1 然后 digit = 0 执行循环......但是 0..1 是一个空范围,所以反转它仍然会产生一个空范围,对吗?或者是吗?

0..1不是空范围。它是整数集 {0,1} - 您正在考虑的空范围 1..0,所以我会问您正在编译的文件是否真的是您认为正在编译的文件。

于 2013-10-03T01:21:24.300 回答