一段自动生成的 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是一个空范围,所以反转它仍然会产生一个空范围,对吗?或者是吗?
您使用的是什么 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)
我想要的是用 digit = 1 然后 digit = 0 执行循环......但是 0..1 是一个空范围,所以反转它仍然会产生一个空范围,对吗?或者是吗?
0..1
不是空范围。它是整数集 {0,1} - 您正在考虑的空范围是 1..0
,所以我会问您正在编译的文件是否真的是您认为正在编译的文件。