Ada编译器:已分配警告变量<x>但从未读过</x>

时间:2014-07-26 09:43:23

标签: task ada

我在Ada中有以下非常简单的代码,这让我感到很悲伤。我将代码调整到最低限度以显示问题,您唯一需要知道的是Some_Task是一种任务类型:

task body TB is
    Task1 : Some_Task_Ref;
begin
   Task1 := new Some_Task;
    loop
         Put_Line("Main loop is running, whatever...");
         delay 5.0;
    end loop;
end TB;

根据我对Ada任务激活的理解,这应该足够了:我正在创建一个类型&#34; Some_Task&#34;而且我不必对它做任何事情,它会在没有任何干预的情况下执行它的主循环。它不像在java中你需要调用&#34; start&#34;任务对象上的方法。

但如果我纠正了,为什么编译器拒绝构建,给我错误:

warning variable "Task1" is assigned but never read

我为什么要被迫阅读&#34;任务1?这是一项任务,它需要做的只是运行......我错过了什么?

注意:这似乎只有在我使用GNAT&#34; Gnat模式&#34; (切换-gnatg)。不幸的是,我需要这种模式用于一些高级的pragma,但它似乎引入了一些&#34; overzelous&#34;检查就像导致上述问题的那样。如何停用该支票?

2 个答案:

答案 0 :(得分:2)

这是一个警告,而不是错误,并且不会阻止构建可执行文件(除非您已打开“将警告视为错误”)。这是编译器的一个暗示,你可能在创建一个从未使用过的变量时犯了一个错误。你可以通过将它声明为常量来告诉编译器你没有使用Task1,如下所示:

Task1 : constant Some_Task_Ref := new Some_Task;

答案 1 :(得分:0)

回答这个问题,因为答案是在评论中发布的,不能将其标记为答案。

正如霍尔特所说(所有道具都是他),这可以通过使用:

来解决
pragma Warnings (Off, Some_Task_Ref) ;