首页 > 解决方案 > 关于使用 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

问题: 为什么有一条信息消息提示我需要为这个包提供一个主体,而我已经这样做了?

标签: linuxcompiler-warningsadaada2012

解决方案


信息消息不用于建议您应该更改程序,仅用于提供一些(有用或无用)信息。在你的情况下,信息是真实的。如果不满足,就会变成错误。

您可能需要检查此标志是否导致生成此消息:

根据GNAT 用户指南

-gnatw.e `激活每个可选警告。

此开关激活所有可选警告,包括那些未被 -gnatwa 激活的警告。不建议在正常使用时使用此开关。如果您打开此开关,几乎可以肯定您会收到大量无用的警告。从 -gnatwa 中排除的警告通常是高度专业化的警告,仅适用于根据专门的编码规则专门设计的代码。

如果您不想删除该开关,至少您可以禁用此特定信息消息:

-gnatw.Y

`禁用有关为什么包规范需要正文的信息消息。

此开关抑制信息消息的输出,显示为什么包规范需要正文。


推荐阅读