这里的问题是,在函数中已经有一些语句后,我无法在函数内声明变量。在开始时声明工作正常,但在某些事情之后,它会给出一个解析错误。例如:
int main()
{
int b;
b = sisesta();
float st[b];
return 0;
}
我想声明一个数组st
,其大小由另一个函数返回,但它不会让我这样做!说“浮动前解析错误”。顺便说一句,这是在C中,但我猜它与其他语言中的语法相同。
任何帮助表示感谢。
答案 0 :(得分:6)
在C99之前的C标准中,您必须在函数的开头声明局部变量。从C99开始,不再需要这样做。
由于Dev-C ++附带gcc且最近的gcc版本部分支持C99,您可以尝试将-std=c99
添加到Dev-C ++设置中的gcc参数列表以触发C99模式。
答案 1 :(得分:2)
C中的Dude你必须在开始时声明所有变量。你不能在陈述之间声明
答案 2 :(得分:0)
你可以malloc()
float*
达到你想要的尺寸(之后记得free()
):
int main()
{
int b;
float *st;
b = sisesta();
if((st = malloc(sizeof float * b)) == NULL){exit 1;}
/* blah blah */
free(st);
return 0;
}
答案 3 :(得分:0)
事实证明,我刚刚使用旧版本的DevC ++并不支持更新的标准,最新版本的声明工作正常,感谢您的帮助。
答案 4 :(得分:0)
即使在C89中,在函数开头执行所有声明只是一种风格选择 - 您在代码中遇到的麻烦是您试图在未知大小的堆栈上声明一个数组,并且直到C99才被允许。如果您要执行相同的代码,但将“float st [b]”替换为“b”为常量的语句,它将起作用,如“float st [10]”