在Ada中反转空范围

时间:2013-10-02 22:25:02

标签: range reverse ada

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

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

导致gnat ada发出:

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

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

  

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

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