2

我尝试使用编译它-gcc,它按预期工作,但是当添加时-pedantic,它不会编译。我仍然是编程的初学者,这是我第一次遇到这个问题,所以这对我来说是一个很大的问题。

这是导致错误的代码:

char *exercise[5]={"swimming", "running", "brisk walking", "weight lifting", "zumba"};

如果您能解释解决方案是什么,而不仅仅是固定代码,我将不胜感激,因为我想学习。

4

1 回答 1

7

这与数组无关。标准化 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 及更高版本)中,您可以自由混合语句和声明。GCC 可以通过-std=c99在命令行中指定切换到 C99 模式。

于 2014-08-17T05:45:24.617 回答