1
#include <stdio.h>

struct virus
{
    char signature[25];
    int size;
}v[2];

int main(void) {

    static v[0] = {"Yankee",1813};
    static v[1] = {"Doodle",2813};
    int i;

    for(i=0;i<=1;i++)
    {
        printf("%s %d\n",v[i].signature,v[i].size);
    }

    return 0;
}

我在这个 C 代码中得到编译器错误。

错误:函数中的声明语法main()

我猜有一些错误v[2],因为它与外部类相关联,而v[0]v[1]静态类相关联。

但是,我不确定这是唯一的原因还是其他原因?


编辑:我通过删除错误的语法来编辑代码。

4

2 回答 2

4

声明没有错误v[2],问题在后面。

你写过

 static struct v[0] = {"Yankee",1813};

试图定义一个 0 大小的数组,默认 C 标准不允许这样做。

也就是说,语法也非常错误。你没有合适的类型,记住,struct它本身不是一个类型,它是一个关键字。struct <something>实际上是一种类型

然后,从逻辑的角度来看,您可能完全不想要一个新变量。如果您想使用 中的数组元素v,只需使用变量名即可。就像是

#include <stdio.h>

struct virus
{
    char signature[25];
    int size;
}v[2] = { {"Yankee",1813}, {"Doodle",2813}}; //get it initialized, job done

int main(void) {

    int i;
    for(i=0;i<=1;i++)
    {
        printf("%s %d\n",v[i].signature,v[i].size);
    }

    return 0;
}

恕我直言,将以更好的方式完成这项工作。


编辑:

如果您对分配单个元素(而不是初始化)感兴趣,那么您不能为此目的使用大括号括起来的初始化程序,它并不意味着是分配的 RHS 操作数。为此,您需要使用复合文字,例如

v[0] = (struct virus){"Yankee",1813};
v[1] = (struct virus){"Doodle",2813};

也将完成这项工作。

于 2017-03-03T06:32:56.257 回答
0

不要将结构定义与变量声明混为一谈,这是一种草率的做法。

相反,使用 typedef:

typedef struct 
{
    char signature[25];
    int size;
} virus_t;

然后你可以随意声明这种类型的变量:

static virus_t v[2] = 
{
  {"Yankee",1813},
  {"Doodle",2813}
};

或者使用指定的初始化器

static virus_t v[2] = 
{
  [0] = {"Yankee",1813},
  [1] = {"Doodle",2813}
};
于 2017-03-03T07:52:03.737 回答