ACSL规范中的命名常量

时间:2014-03-16 18:48:24

标签: frama-c

如何在ACSL规范中使用命名常量?这些常量是宏(#define MY_CONST ...)或常量声明(const int MY_CONST ...)。前者不起作用,因为预处理器没有扩展宏(ACSL规范是C注释),后者不是因为常量被视为变量,因此一些证明失败。如果我用实际数字替换命名常量,那么规范工作正常。

有没有人有一个好主意来处理命名常量? 提前致谢

2 个答案:

答案 0 :(得分:6)

为了扩展ACSL规范中的宏,您可以使用-pp-annot选项。

答案 1 :(得分:1)

我可以在Pascal Cuoq的协助下解决这个问题。它实际上不是frama-c的问题,而是gcc。一个人需要-fpreprocessed编译器选项。我的完整命令现在是:

frama-c -cpp-extra-args="-I `frama-c -print-share-path`/libc" -cpp-extra-args="-nostdinc" -cpp-extra-args="-fpreprocessed </path/to/stdc-predef.h>" -wp -wp-rte -pp-annot myfile.c