c语言 - 任何人都可以指出为什么会发生错误吗?错误是"预期的"=",";","asm"或__attribute__"<之前



我想在这里完成的是一个带链表的字典。有一个节点指针数组。我正在尝试使用malloc初始化每个数组指针。当我删除for循环时,它运行良好。

#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "dictionary.h"
unsigned int count = 0;
unsigned int collisions = 0;
unsigned long index = 0;
#define HASHTABLE_SIZE 1999099
// Initialize struct for linked list.
typedef struct node{
     char word[46];
     struct node *next;
  } node;
// Initialize an array of node pointers.
node *hashtable[HASHTABLE_SIZE];

for(unsigned long i = 0; i < HASHTABLE_SIZE; i++)
  //   Error here reads expected "=",";","asm" or __attribute__ before "<"
  {
    hashtable[i] = (node *)malloc(sizeof(node));
  }

语句只允许在函数内部使用。

添加

int main(void) {

在for循环和之前

    return 0;
}

或者,如果main在另一个文件中,则定义一些其他函数来包含循环。

由于for(unsigned long i = 0; ...构造仅在C99中有效,我的猜测是您没有将代码编译为C99(或者您的编译器不符合C99)。

一种简单的检查方法是将i的声明移动到封闭代码块的顶部。

我假设你向我们展示的不是整个编译单元,而是它的摘录。如果假设是错误的,并且你展示的代码位于所有函数之外,那么你需要将其包含在一个函数中,正如@Keith Thompson所解释的那样。

它应该读取

node *hashtable[HASHTABLE_SIZE];
unsigned long i;
for(i = 0; i < HASHTABLE_SIZE; i++)
  //   Error here reads expected "=",";","asm" or __attribute__ before "<"
  {
    hashtable[i] = (node *)malloc(sizeof(node));
  }

您不能在C中的for()中声明变量,只能在C++和C99中声明(正如@DonFego所指出的)。

如果要在声明循环中的变量时使用for循环,则必须使用C99标准。我不知道其他编译器的情况,但对于gcc,您需要传递标志--std=c99

这将编译类似于您所拥有的循环:

for(unsigned long i = 0; i < HASHTABLE_SIZE; i++)

相关内容

  • 没有找到相关文章