如何在ACSL规范中使用命名常量?这些常量是宏(#define MY_CONST ...
)或常量声明(const int MY_CONST ...
)。前者不起作用,因为预处理器没有扩展宏(ACSL规范是C注释),后者不是因为常量被视为变量,因此一些证明失败。如果我用实际数字替换命名常量,那么规范工作正常。
有没有人有一个好主意来处理命名常量? 提前致谢
答案 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