GNAT允许以下代码,因为Random(Generator, First, Last)
在运行时实现,但它不是Ada 2012的一部分。 我是否可以使其生成编译错误,因为它不应该可用?
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Numerics.Discrete_Random;
procedure Main is
package Positive_Random is new Ada.Numerics.Discrete_Random
(Result_Subtype => Positive);
Generator : Positive_Random.Generator;
-- This should fail, since function isn't part of Ada 2012.
Value : Positive := Positive_Random.Random (Generator, 1, 10);
begin
Put_Line (Value'Image);
end Main;
这是我的gpr文件:
project Default is
for Source_Dirs use ("src");
for Object_Dir use "obj";
for Main use ("main.adb");
package Compiler is
for Switches ("ada") use ("-gnat12");
end Compiler;
end Default;
-gnatX
开关吗?比如环境变量等。 - thindilRandom
的那个版本在运行时(Ubuntu 20.04中的gnat-9软件包,所以我猜是FSF GNAT)。我知道这一点,看一下Ada.Numerics.Discrete_Random(a-nudira.ads
)的规范。由Ada 2005或2012提供的扩展标有pragma Ada_05
和pragma Ada_2012
,编译器使用这些指示根据请求的版本引发错误或不引发错误。我猜你的是GNAT Community Edition,它似乎不支持不同的语言版本(请参见https://www.adacore.com/gnatpro/comparison)。 - Gneuromante