cbmc如何与c标头一起使用?

时间:2019-06-24 15:53:16

标签: c z3 pycparser cbmc

如果我的ac文件包含多个功能,并且我想在程序的预处理版本上使用z3求解器运行cbmc(使用gcc),并且标头部分中还有一些其他文件(c文件) 。 cbmc将如何查看这些文件? 因为我尝试运行它,并且他给出了一些未声明变量的错误,实际上它们是在头文件之一中声明的。

任何人都可以解释它的工作原理吗?

更新:

int test(int x) {
for (int i = 2; i < sqrt(x); i++) {
    if (x%i == 0)
        return 0;
}

首先,我使用gcc预处理程序

然后通过pycparser解析程序

然后仪器(在4后面添加打印语句以查看x的值)

然后我在文件的检测版本上运行了cbmc,但出现此错误:未声明函数'sqrt'

1 个答案:

答案 0 :(得分:0)

您应在项目中包含头文件引用的所有文件。如果关联的.c文件不可用,仅包含正确的标题是不够的。


您的示例代码还必须包含以下几行:

# first, you create a struct with the order col and the valu col
df = df.withColumn("my_data", F.struct(F.col('orderCol'), F.col('valueCol'))

# then you create an array of that new column 
df = df.groupBy("partitionCol").agg(F.collect_list('my_data').alias("my_data")

# finaly, you apply your function on that array
df = df.withColumn("calculatedCol", my_udf(F.col("my_data"))