1

这里的问题是,在函数中已经有一些语句之后,我不能在函数中声明变量。在开始时声明工作正常,但在某些事情之后,它会给出一个解析错误。例如:

int main()
{
 int b;
 b = sisesta();
 float st[b];

 return 0;
}

我想声明一个数组st,其大小由另一个函数返回,但它不允许我这样做!说“在浮动之前解析错误”。顺便说一句,这是在 C 语言中,但我想它与在其他语言中具有相同语法的语言相同。

任何帮助表示赞赏。

4

5 回答 5

6

在 C99 之前的 C 标准中,您必须在函数的开头声明局部变量。从 C99 开始,不再需要这样做。

由于 Dev-C++ 附带 gcc 并且最近的 gcc 版本确实部分支持 C99,因此您可以尝试添加-std=c99到 Dev-C++ 设置中的 gcc 参数列表以触发 C99 模式。

于 2009-01-07T12:28:19.243 回答
2

C语言中的老兄,您必须在开始时声明所有变量。您不能在语句之间声明

于 2009-01-07T12:23:49.503 回答
0

事实证明,我只是有一个旧版本的 DevC++,它不支持较新的标准,最新版本的语句工作正常,无论如何感谢您的帮助。

于 2009-01-08T08:57:16.407 回答
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;
}
于 2009-01-07T12:39:59.703 回答
0

即使在 C89 中,在函数开头进行所有声明也只是一种风格选择 - 您在代码中遇到的问题是您试图在未知大小的堆栈上声明一个数组,这是不允许的直到 C99。如果您要执行相同的代码,但将“float st[b]”替换为“b”为常量的语句,它将起作用,例如“float st[10]”

于 2009-03-18T12:11:27.280 回答