一段自动生成的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 是一个空范围,所以反转它仍然产生一个零范围,对吗?或者是吗?
答案 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
的空范围,所以我会问你编译的文件是否真的是文件你认为你正在编译。