Frama-c[内核]用户错误:数组长度为零。不支持此扩展
我试图用这个命令生成一个c程序的PDGFrama-c[内核]用户错误:数组长度为零。不支持此扩展,c,frama-c,C,Frama C,我试图用这个命令生成一个c程序的PDG frama-c-machdep x86_64-pdg-cpp命令'gcc-c-E-std=c99-I'。try.c 但我得到以下错误 使用“gcc-C-E-std=c99-I.try.C”对[kernel]进行预处理 /usr/include/x86\u 64-linux-gnu/bits/byteswap.h:47:[内核]警告:调用未声明的函数\uu内置函数\u bswap32。旧式K&R代码? /usr/include/x86_64-linux-g
frama-c-machdep x86_64-pdg-cpp命令'gcc-c-E-std=c99-I'。try.c
但我得到以下错误
使用“gcc-C-E-std=c99-I.try.C”对[kernel]进行预处理
/usr/include/x86\u 64-linux-gnu/bits/byteswap.h:47:[内核]警告:调用未声明的函数\uu内置函数\u bswap32。旧式K&R代码?
/usr/include/x86_64-linux-gnu/bits/byteswap.h:111:[内核]警告:调用未声明的函数u内置函数u bswap64。旧式K&R代码?
/usr/include/x86_64-linux-gnu/bits/fcntl linux.h:316:[内核]用户错误:数组长度为零。不支持此扩展
[内核]用户错误:跳过有错误的文件“try.c”。
[kernel]Frama-C中止:用户输入无效。
我如何解决这个问题?
更新:
C代码是
#include<stdio.h>
int main()
{
int n,m;
int i,j;
int flag=1;
scanf("%d%d",&n,&m);
int a[n][m];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<n-1;i++)
{
if(a[i][0]==a[i+1][0])
{
flag=0;
break;
}
for(j=0;j<m-1;j++)
{
if(a[i][j]!=a[i][j])
{
flag=0;
break;
}
}
if(flag==1)
{
continue;
}
else
break;
}
if(flag==1)
printf("YES");
else
printf("NO");
return 0;
}
#包括
int main()
{
int n,m;
int i,j;
int标志=1;
scanf(“%d%d”,&n,&m);
int a[n][m];
对于(i=0;i自Frama-C Aluminal(2016年5月发布)以来支持零长阵列。这是变更日志的相关摘录:
-! Cil [2015/12/02] Changes in the handling of incomplete structs and
zero-length arrays. Initialization of incomplete (completely
undefined) structs is now duly rejected. Several compiler
extensions to the C99 standard (empty initializers,
zero-length arrays, etc.) now require a GCC or MSVC machdep
(e.g. -machdep gcc_x86_32).
如前所述,您应该使用GCC machdep,即在您的情况下使用GCC_x86_64
。很难说没有看到代码,但错误文本让人怀疑您试图使用可变长度数组,并且编译器不支持它。正如@SergeBallesta所述,如果没有is包括您正在使用的代码、命令行和Frama-C版本。此外,您似乎依赖于系统提供的标准标头,而不是Frama-C本身的标头。这些标头可能包含特定于编译器的构造,Frama-C可能支持也可能不支持。我已用代码以及我使用的frama-c版本-machdep x86_64,gcc_x86_64给我一个用户错误[内核]用户错误:不支持的机器gcc_x86_64。试试x86_64 x86_32 ppc_32 x86_16中的一个。好的,我使用的是Fluine版本,我将尝试最新的铝制版本