gpt4 book ai didi

sockets - GNAT.Sockets.Selector_Type 的地址子句

转载 作者:行者123 更新时间:2023-12-03 11:50:59 25 4
gpt4 key购买 nike

我正在使用 Selector_Type在我的代码中。

一方面,Selector_Type来自 GNAT.Sockets comes with语用:

pragma Volatile (Selector_Type);

另一方面,Gnatckeck 的 rule 9.1.1.2应用于我的代码会引发

volatile object with no address clause [Volatile_Objects_Without_Address_Clauses]



因为pragma。

wikibook's example 中未处理此主题我也没有在我的基本代码中的任何地方解决这个问题。

那么,我应该为我的选择器使用什么地址?

最佳答案

你不能。 Selector_Type是 volatile 的,因为它是操作系统的接口(interface),并且可能(将)更改而无需 Ada 代码的任何操作。

我的试验例子是

package Rules is
type Selector is limited private;
private
type Selector is null record with Volatile;
S : Selector;
end Rules;

检查为
$ gnatcheck --show-rule rules.ads -rules +RVolatile_Objects_Without_Address_Clauses
rules.ads:5:04: volatile object with no address clause [Volatile_Objects_Without_Address_Clauses]

看来你要说你要检查什么规则,为什么不选择这个呢?

或者,如果您可以控制源,您可以申请 exemption .

在这种情况下,这看起来像

package Rules is
type Selector is limited private;
private
type Selector is null record with Volatile;
pragma Annotate (Gnatcheck, Exempt_On,
"Volatile_Objects_Without_Address_Clauses",
"only a demo!");
S : Selector;
pragma Annotate (Gnatcheck, Exempt_Off,
"Volatile_Objects_Without_Address_Clauses");
T : Selector;
end Rules;

现在它检查为
$ gnatcheck --show-rule rules.ads -rules +RVolatile_Objects_Without_Address_Clauses
rules.ads:11:04: volatile object with no address clause [Volatile_Objects_Without_Address_Clauses]

(第 11 行是 T 的未豁免声明;没有关于第 8 行的 S 声明的投诉)。

笔记:

为这个答案的早期版本道歉,这有一个根本的误解。 gnatcheck 很好地支持该规则,只要您正确阅读它:它是关于没有地址子句的 volatile 对象,而不是 volatile 类型。

关于sockets - GNAT.Sockets.Selector_Type 的地址子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60431907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com