我尝试使用-gcc
进行编译,但它按预期工作,但是当添加-pedantic
时,它将无法编译。我还是编程的初学者,这是我第一次遇到这个问题所以对我来说这是一个很大的问题。
以下是导致错误的代码:
char *exercise[5]={"swimming", "running", "brisk walking", "weight lifting", "zumba"};
如果您想解释解决方案的内容而不仅仅是固定代码,我会很感激,因为我想学习。
答案 0 :(得分:6)
这与数组没有任何关系。标准化C语言的原始版本(ISO C90)禁止混合声明和代码。
在C90中,{}
包围的每个局部块都有相当严格的结构:它以声明(如果有的话)开头,然后是语句(代码)。
这是您必须遵循的格式。将数组声明移动到块的顶部。它应该是微不足道的,因为你的初始化器都不依赖于任何运行时计算。这里的所有都是它的。
{
/* Declarations go here */
char *exercise[5]={"swimming", "running", "brisk walking", "weight lifting", "zumba"};
/* Statements (i.e. code) goes here */
}
当然,这里的一个未说出口的问题是:你真的必须使用C90吗?您是否明确要求为C90编译器编写代码?也许您应该简单地将编译器切换到C99模式并忘记这个特定于C90的限制?
在较新版本的C语言(C99及更高版本)中,您可以自由地混合语句和声明。通过在命令行中指定-std=c99
,可以将GCC切换到C99模式。