Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Frama-c[内核]用户错误:数组长度为零。不支持此扩展_C_Frama C - Fatal编程技术网

Frama-c[内核]用户错误:数组长度为零。不支持此扩展

Frama-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

我试图用这个命令生成一个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-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版本,我将尝试最新的铝制版本