C &引用;在'之前的预期表达式;{&“x27;代币”;
因此,当我尝试将值分配给int数组时,我不断遇到这个问题。我阅读了这篇文章,但我仍然不明白为什么它会出现在我的代码中。我感觉我正在错误地初始化和声明数组,这就是为什么它会给出我的问题 因此,在main()之前,我要声明一些全局变量组(是的,我知道这是危险的,但出于我的目的是必需的)C &引用;在'之前的预期表达式;{&“x27;代币”;,c,arrays,C,Arrays,因此,当我尝试将值分配给int数组时,我不断遇到这个问题。我阅读了这篇文章,但我仍然不明白为什么它会出现在我的代码中。我感觉我正在错误地初始化和声明数组,这就是为什么它会给出我的问题 因此,在main()之前,我要声明一些全局变量组(是的,我知道这是危险的,但出于我的目的是必需的) double rob_size, rob_tilt; double rob_leftcolor [3]; double rob_rightcolor [3]; 然后在main函数中,我初始化变量和数组 rob_si
double rob_size, rob_tilt;
double rob_leftcolor [3];
double rob_rightcolor [3];
然后在main函数中,我初始化变量和数组
rob_size = 1.0;
rob_tilt = 0.0;
rob_leftcolor [3] = {1.0, 0.0, 0.0};
rob_rightcolor [3] = {0.0, 1.0, 0.0};
但是,我在处收到错误消息“在“{”标记之前的预期表达式”
首先,这个错误消息是什么意思?第二,是因为我初始化和声明数组不正确而出现这个消息吗
感谢您在申报时进行初始化:
double rob_size = 1.0;
double rob_tilt = 0.0;
double rob_leftcolor [3] = {1.0, 0.0, 0.0};
double rob_rightcolor [3] = {0.0, 1.0, 0.0};
只有数组需要这样做,但最好还是用同样的方法
你的选择是
rob_leftcolor[0] = 1.0;
rob_leftcolor[1] = 0.0;
rob_leftcolor[2] = 0.0;
Charlie Burns是正确的,最好使用实际值初始化数组。但是,使用您提供的代码,一旦声明数组,您只能设置特定元素:
double x[3];
x[0] = 1.1;
x[1] = 2.2;
x[2] = 3.3;
如您所见,为了设置变量,您使用了括号内的数字,该数字对应于您试图设置的元素。声明数组后,您不能一次设置所有变量。查看答案和注释后,我认为还有一些事情需要澄清:
static
{…}
来初始化它
无法在赋值语句中使用它double rob_leftcolor[3]=
{1.0,0.0,0.0}
是一个定义,而rob_leftcolor[3]={1.0,
0.0,0.0}
是赋值,因此不能在此处使用初始值设定项存储类,考虑下面的情况,没有<代码>静态< /代码>,实际上是定义全局变量:
// a1.c
static double rob_size, rob_tilt;
rob_leftcolor [3] = {1.0, 0.0, 0.0};
rob_rightcolor [3] = {0.0, 1.0, 0.0};
int main(int argc, char** argv) {
rob_size = 1.0;
rob_tilt = 0.0;
return 0;
}
// a2.c
rob_leftcolor [3] = {1.0, 0.0, 0.0};
然后编译并链接它们:
$ gcc -c a1.c
a1.c:2:1: warning: data definition has no type or storage class [enabled by default]
a1.c:3:1: warning: data definition has no type or storage class [enabled by default]
$ gcc -c a2.c
a2.c:1:1: warning: data definition has no type or storage class [enabled by default]
$ gcc -o a a1.o a2.o
a2.o:(.data+0x0): multiple definition of `rob_leftcolor'
a1.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status
因为这就是在C@user2930701中初始化数组的方式,因为如果数组大小为空,编译器需要知道数组的大小……如果不是空的,那只是因为C语言这么说。是的,使用
{…}
作为数组的初始值设定项仅用于初始化,不用于赋值。还必须为这些变量指定存储类,例如static double rob_size=1.0
否则您的编译将向您发出警告。您是否可以扩展指定存储类的第一个概念?您不必指定存储类。stor年龄级别定义范围(可见性)以及C程序中变量和/或函数的生存时间。C程序中可以使用以下存储类:auto
,register
,static
,extern
。实际上,auto
是默认的存储类,不需要使用auto
存储显式指定变量类。存储类可以参考“C编程语言”。如果未指定存储类,编译将向您发出警告。有趣的是,我的gcc和clang不会发出警告。