我在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任务激活的理解,这应该足够了:我正在创建一个类型" Some_Task"而且我不必对它做任何事情,它会在没有任何干预的情况下执行它的主循环。它不像在java中你需要调用" start"任务对象上的方法。
但如果我纠正了,为什么编译器拒绝构建,给我错误:
warning variable "Task1" is assigned but never read
我为什么要被迫阅读"任务1?这是一项任务,它需要做的只是运行......我错过了什么?
注意:这似乎只有在我使用GNAT" Gnat模式" (切换-gnatg
)。不幸的是,我需要这种模式用于一些高级的pragma,但它似乎引入了一些" overzelous"检查就像导致上述问题的那样。如何停用该支票?
答案 0 :(得分:2)
这是一个警告,而不是错误,并且不会阻止构建可执行文件(除非您已打开“将警告视为错误”)。这是编译器的一个暗示,你可能在创建一个从未使用过的变量时犯了一个错误。你可以通过将它声明为常量来告诉编译器你没有使用Task1,如下所示:
Task1 : constant Some_Task_Ref := new Some_Task;
答案 1 :(得分:0)
回答这个问题,因为答案是在评论中发布的,不能将其标记为答案。
正如霍尔特所说(所有道具都是他),这可以通过使用:
来解决pragma Warnings (Off, Some_Task_Ref) ;