#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]
中存在一些错误,因为它与extern类相关联,而v[0]
和v[1]
与静态类相关联。
但是,我不确定这是唯一的原因还是其他原因?
编辑:我通过删除错误的语法编辑了代码。
答案 0 :(得分: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操作数。您需要使用 compound literal 来实现此目的,例如
v[0] = (struct virus){"Yankee",1813};
v[1] = (struct virus){"Doodle",2813};
也将完成这项工作。
答案 1 :(得分: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}
};