为什么此代码不会生成约束错误或打印正数?

evi*_*ate 1 ada

我希望这段代码能够生成约束错误或打印正数.为什么这段代码也没有?

WITH ADA.TEXT_IO;
USE  ADA.TEXT_IO;

PROCEDURE OVERFLOW IS
    PROCEDURE P (I: POSITIVE) IS
        X: INTEGER := INTEGER'LAST;
    BEGIN
        X := (X + I) / 2;
        PUT_LINE (INTEGER'IMAGE (X) & " SHOULD BE POSITIVE");
    END;
BEGIN
    P(10);
END;
Run Code Online (Sandbox Code Playgroud)

Jac*_*sen 7

可能是因为您的编译器未配置为适当的Ada编译器.具体来说,旧版本的GNAT需要一个标志才能作为一个合适的Ada编译器.根据我的说明,标志是:

-fstack-check -gnata -gnato
Run Code Online (Sandbox Code Playgroud)