gpt4 book ai didi

static-analysis - 溢出检查 Frama-C 的无效断言

转载 作者:行者123 更新时间:2023-12-02 03:11:16 24 4
gpt4 key购买 nike

在为添加操作检查 shortchar 数据类型的溢出时,Frama-C 插入的断言似乎不正确:

enter image description here

对于char和short数据,最大正负值都是整数数据类型。

这可能是什么原因?

最佳答案

小于 int 的整数类型在用于算术运算时被转换为 intunsigned(参见 C11 6.3.1.8通常的算术转换)。这就是您看到 xy 转换为 (int) 的原因。请注意,默认情况下 -rte 不会发出向下转换的警告,因为它们不是未定义的行为(6.3.1.3§3 表示已签名的向下转换是实现定义的,并且实现可能会引发信号)。如果您添加选项 -warn-signed-downcast,您将看到您可能正在寻找的断言,这是由于转换为 (char)结果:

/*@ assert rte: signed_downcast: (int)x+(int)y ≤ 127; */
/*@ assert rte: signed_downcast: -128 ≤ (int)x+(int)y; */

请注意,如果您将结果存储到一个 int 中,如

void main(void) {
char x;
char y;
int z;
x = 1;
y = 127;
z = x + y;
return;
}

不会有任何沮丧警告(但会出现签名溢出警告)。

关于static-analysis - 溢出检查 Frama-C 的无效断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39868433/

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