【问题标题】:Incompatible "for" loop in CC中不兼容的“for”循环
【发布时间】:2015-11-03 23:43:59
【问题描述】:

我有一个包含以下函数的 C 库:

void arlist_del(struct _arlist *list, int position, int delit) {

if (position > list->size - 1)
    return;
if (list->size == 1) {
    arlist_clear(list);
    return;
}
if (delit)
    free(arlist_get(list, position));
for ( int i = position; i < list->size; ++i ) {  //line were error occur
    if (i == list->size - 1)
        list->data[i] = NULL;
    else
        list->data[i] = list->data[i + 1];
}
void ** new_data = realloc(list->data, arlist_getsizeof(list));
--list->size;
assert(new_data != NULL);
arlist_setdata(list, new_data, list->size, 0);
}

但是我在代码中标识的行中收到错误“'for' 循环初始声明只允许在 C99 模式下”。我想知道如何解决这个问题,我无法切换到 C99 模式。我无法声明“int i = position " 在空行中,所以我不知道该怎么办。

谢谢

【问题讨论】:

  • 在函数开头声明int i;,然后声明for (i = position;
  • 为什么不能切换到C99模式?
  • 据我所知,您不能在 C for 循环中“int i”。您必须在 for 循环之外声明“int i”,然后使用 for(i = position)。
  • 嗯,等一下。这与您之前的问题完全相同stackoverflow.com/q/33457768/2564301 ...
  • 并且:不要再发布同样的问题!你已经得到了答案! @Jongware 是正确的。这同一个问题!还是您要为每次出现此问题提出一个新问题?

标签: c loops for-loop c99


【解决方案1】:

在 for 循环之外声明它。

int i;
for ( i = position; i < list->size; ++i )

【讨论】:

  • 此外,在 C89 中,int i; 实际上必须位于代码块的开头。这可以是现有的,也可以引入一个新的块。
【解决方案2】:

发生这种情况是因为在 C 中,最初您必须执行这样的 for 循环:

int i; // note declaration before loop
for ( i = position; i < list->size; ++i ) {  //line were error

您可以通过在代码中进行此更改或添加标志来解决此问题:-std=c99

这似乎也是一个相当普遍的问题。下次发帖前请先搜索您的问题。

【讨论】:

  • 混合声明和语句也是 C99 的一个特性。并且 OP 已经声明他不能使用 C99 模式(似乎是一些遗留代码)。
  • 我认为他的意思是“我不能”,因为他不知道怎么做,但我明白你的意思。
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2013-11-05
  • 2011-01-23
  • 1970-01-01
  • 2022-10-20
  • 1970-01-01
相关资源
最近更新 更多