Frama-C 中的模型非确定性值整数
Model non-deterministic value integer in Frama-C
谁能告诉我这是 Frama-C 中整数和无符号整数的非确定性值的正确模型吗?
/* Suppose Frama-C is installed in /usr/local -default prefix */
#include "/usr/local/share/frama-c/builtin.h"
#include "/usr/local/share/frama-c/libc/limits.h"
...
#define nondet_int() Frama_C_interval(INT_MIN, INT_MAX)
#define nondet_uint() Frama_C_interval(0, UINT_MAX)
...
如果我在选项-machdep
中使用不同架构的上述代码,是否有任何例外?
不,在 Neon 版本中,如果您想使用另一个 -machdep
,您必须手动定义适当的宏。你通常会得到这样的 command-line:
frama-c -cpp-extra-args="-D__FC_MACHDEP_X86_64" -machdep x86_64
即将发布的 Sodium 版本将不再需要 -cpp-extra-args
,并且默认提供 -I
选项让预处理器搜索 Frama-C 的 libc
header,这样您就不必自己提供或依赖 #include
指令中的绝对路径
注意:此回答并非对 Sodium 发布的任何特定日期的承诺。
Frama_C_interval(0, UINT_MAX)
可能无法按预期工作的一个原因是 Frama_C_interval
的类型为 int (int, int)
。当您碰巧想要 unsigned int
值的整个范围时,这实际上往往会有所帮助,因为引入的转换是近似的,但通常 Frama_C_interval
被声明为返回 int
很麻烦。
最新发布的版本已经有Frama_C_unsigned_int_interval
,但它在share/libc/__fc_builtin.h
(安装到/usr/local/share/frama-c/libc/__fc_builtin.h
。文件builtin.h
看起来像一个残留物,尤其是$Id$ 行可以追溯到在 SVN 下完成开发的时间。
为了指定一个值应该是所有可能的 unsigned int
值,Frama_C_unsigned_int_interval(0, -1)
省去了包含 limit.h
的麻烦。作为参数传递的 int
值 -1
根据 C 规则转换为最大的 unsigned int
。
谁能告诉我这是 Frama-C 中整数和无符号整数的非确定性值的正确模型吗?
/* Suppose Frama-C is installed in /usr/local -default prefix */
#include "/usr/local/share/frama-c/builtin.h"
#include "/usr/local/share/frama-c/libc/limits.h"
...
#define nondet_int() Frama_C_interval(INT_MIN, INT_MAX)
#define nondet_uint() Frama_C_interval(0, UINT_MAX)
...
如果我在选项-machdep
中使用不同架构的上述代码,是否有任何例外?
不,在 Neon 版本中,如果您想使用另一个 -machdep
,您必须手动定义适当的宏。你通常会得到这样的 command-line:
frama-c -cpp-extra-args="-D__FC_MACHDEP_X86_64" -machdep x86_64
即将发布的 Sodium 版本将不再需要 -cpp-extra-args
,并且默认提供 -I
选项让预处理器搜索 Frama-C 的 libc
header,这样您就不必自己提供或依赖 #include
指令中的绝对路径
注意:此回答并非对 Sodium 发布的任何特定日期的承诺。
Frama_C_interval(0, UINT_MAX)
可能无法按预期工作的一个原因是 Frama_C_interval
的类型为 int (int, int)
。当您碰巧想要 unsigned int
值的整个范围时,这实际上往往会有所帮助,因为引入的转换是近似的,但通常 Frama_C_interval
被声明为返回 int
很麻烦。
最新发布的版本已经有Frama_C_unsigned_int_interval
,但它在share/libc/__fc_builtin.h
(安装到/usr/local/share/frama-c/libc/__fc_builtin.h
。文件builtin.h
看起来像一个残留物,尤其是$Id$ 行可以追溯到在 SVN 下完成开发的时间。
为了指定一个值应该是所有可能的 unsigned int
值,Frama_C_unsigned_int_interval(0, -1)
省去了包含 limit.h
的麻烦。作为参数传递的 int
值 -1
根据 C 规则转换为最大的 unsigned int
。