linux - 关于使用 Ada 的包体要求的令人费解的“信息”消息?
问题描述
在开发 QR 码生成器的早期阶段,我遇到了来自 GNAT 7.4.0(在“Ubuntu 19.04”系统上运行)的特殊“信息”消息。
我正在使用一些相当激进的编译开关:
gnatmake -gnata -gnateE -gnateF -gnatf -gnato -gnatv -gnatVa -gnaty -gnatwe -gnatw.e main.adb
我的代码确实没有错误地构建,但此信息消息确实表明我没有为包“qr_symbol”提供正文。
qr_symbol.ads
with QR_Versions; use QR_Versions;
generic
Ver : QR_Version;
package QR_Symbol is
procedure Export_As_SVG;
private
type Module_State is (
Uncommitted,
One,
Zero
);
type Module_Family is (
Uncommitted,
Finder,
Separator,
Alignment,
Timing,
Format_Spec,
Version_Spec,
Data_Codeword,
EC_Codeword,
Padding
);
type Module is
record
State : Module_State := Uncommitted;
Family : Module_Family := Uncommitted;
end record;
type Module_Matrix is array (
Positive range <>,
Positive range <>
) of Module;
end QR_Symbol;
qr_symbol.adb
with Ada.Text_IO; use Ada.Text_IO;
package body QR_Symbol is
Version : constant QR_Version := Ver; -- Ver is a formal generic parameter
Side_Length : constant Positive := 17 + (Positive (Ver) * 4);
Matrix : Module_Matrix (1 .. Side_Length, 1 .. Side_Length);
procedure Export_As_SVG is
begin
Put_Line ("in Export_As_SVG()...");
Put_Line (" Version: " & Version'Image);
Put_Line (" Side_Length: " & Side_Length'Image);
-- Matrix (1, 1).State := One;
Put_Line (" Matrix (1, 1).State: " & Matrix (1, 1).State'Image);
end Export_As_SVG;
end QR_Symbol;
这是我不明白的信息输出......
GNAT 7.4.0
Copyright 1992-2017, Free Software Foundation, Inc.
Compiling: qr_symbol.adb
Source file time stamp: 2019-12-07 16:29:37
Compiled at: 2019-12-07 16:29:38
==============Error messages for source file: qr_symbol.ads
9. procedure Export_As_SVG;
|
>>> info: "QR_Symbol" requires body ("Export_As_SVG" requires completion)
29 lines: No errors, 1 info message
aarch64-linux-gnu-gnatbind-7 -x main.ali
aarch64-linux-gnu-gnatlink-7 main.ali
程序输出(给定正确的输入,确实给出正确的输出)...
$ ./main '' V1
QR Version requested: V 1
in Export_As_SVG()...
Version: 1
Side_Length: 21
Matrix (1, 1).State: UNCOMMITTED
问题: 为什么有一条信息消息提示我需要为这个包提供一个主体,而我已经这样做了?
解决方案
信息消息不用于建议您应该更改程序,仅用于提供一些(有用或无用)信息。在你的情况下,信息是真实的。如果不满足,就会变成错误。
您可能需要检查此标志是否导致生成此消息:
根据GNAT 用户指南:
-gnatw.e `激活每个可选警告。
此开关激活所有可选警告,包括那些未被 -gnatwa 激活的警告。不建议在正常使用时使用此开关。如果您打开此开关,几乎可以肯定您会收到大量无用的警告。从 -gnatwa 中排除的警告通常是高度专业化的警告,仅适用于根据专门的编码规则专门设计的代码。
如果您不想删除该开关,至少您可以禁用此特定信息消息:
-gnatw.Y
`禁用有关为什么包规范需要正文的信息消息。
此开关抑制信息消息的输出,显示为什么包规范需要正文。
推荐阅读
- python - 如何抓取需要登录并填写验证码的网站的数据
- javascript - 取消选中复选框时从 javascript 中删除 NaN 字
- javascript - React js中的React Bootstrap SweetAlert不起作用
- sql - 查询无重合三表连接
- algorithm - 为什么循环正在替换已经推入向量的树节点
- python - 尝试使用 celery beat 在 django 中调度一个函数但给出错误
- c# - 更改随机文本框的颜色 C#
- amazon-web-services - AWS Lambda 函数只有 54mb 并且出现大小限制错误
- typescript - 修复“类型实例化过深并且可能无限”。在组合函数中
- autodesk-forge - 无法翻译 5GB 和 8GB 等大型压缩文件