gpt4 book ai didi

ada - Ada 中可能有不连续的子类型定义吗?

转载 作者:行者123 更新时间:2023-12-02 02:15:42 27 4
gpt4 key购买 nike

假设我有以下常量来定义一个只接受其范围定义内的有效值的子类型:

type Unsigned_4_T is mod 2**4;

valid_1 : constant Unsigned_4_T := 0;
valid_2 : constant Unsigned_4_T := 1;
invalid_1 : constant Unsigned_4_T := 2;
valid_3 : constant Unsigned_4_T := 3;

现在,我想定义 Unsigned_4_T 的子类型 VALID_VALUES_T,使其仅接受使用常量 valid_1、valid_2 和 valid_3 的有效值。

我一直在尝试使用 Static_Predicate 来实现这一目标,但是,当我声明所需子类型的变量并分配 invalid_1 值时,没有如我预期的约束或编译错误。

最佳答案

AdaCore 编译器要求您启用断言来生成您需要的异常。使用 -gnata 标志编译您的程序。

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Exceptions; use Ada.Exceptions;
with System.Assertions; use System.Assertions;

procedure Main is
type Unsigned is mod 2**4;
subtype discontinuous is Unsigned with
Static_Predicate => discontinuous in 0 | 1 | 3;
Num : discontinuous;
begin
for I in Unsigned'Range loop
Num := I;
Put_Line(Num'Image);
end loop;
exception
when E :Assert_Failure =>
Put_Line("Invalid value assigned to Num: " & Exception_Message(E));
end Main;

程序的输出是:

     0 1Invalid value assigned to Num: Static_Predicate failed at main.adb:12

关于ada - Ada 中可能有不连续的子类型定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67214337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com