c - 由于数组,ISO C90 禁止混合声明和代码。我该如何解决?

标签 c arrays compiler-errors gcc-pedantic

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

这是导致错误的代码:

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

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

最佳答案

这与数组无关。标准化C语言的原始版本(ISO C90)禁止混合声明和代码。

在 C90 中,每个被 {} 包围的本地 block 都具有相当严格的结构:它以声明(如果有)开头,然后是语句(代码)。

这是您必须遵循的格式。将您的数组声明移动到 block 的顶部。它应该是微不足道的,因为你的初始化器都不依赖于任何运行时计算。这里的所有都是它的。

{
  /* 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 模式。

关于c - 由于数组,ISO C90 禁止混合声明和代码。我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25346592/

相关文章:

c - 在 gcc 中编译时出现警告有何影响?可能会产生什么后果?

谁能帮助我编写图书馆目录 C 程序?

python - 使用 Pythons ctypes 从 libc 调用 uname

java - 获取非空对象数组

javascript - 将数组索引设置为在关闭时从 Angular 引导模式中选择

java - 难以理解和纠正错误消息

Java递归构建错误: array required,但找到字符串?

c - fork+exec 没有 atfork 处理程序

javascript - 如何在 JavaScript 字典中存储数组的值?

c++ - 强制 automake 和 autoconf 在编译行后面设置 -lz 标志,并且在不更改 .ac 文件的情况下执行