任何人都可以指出错误发生的原因吗?错误是“预期”=“,”;“,”asm“或__attribute__在”<“之前

时间:2012-01-17 21:22:44

标签: c malloc

我在这里要完成的是一个带链表的字典。有一个节点指针数组。我试图使用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));

  }

4 个答案:

答案 0 :(得分:6)

只允许在函数内部声明。

添加

int main(void) {
在for循环之前

,和

    return 0;
}

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

答案 1 :(得分:3)

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

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

我假设你在整个编译单元中展示的是什么,而是摘录它。如果假设是错误的,并且您显示的代码位于所有函数之外,那么您需要将其括在函数中,如@Keith Thompson所述。

答案 2 :(得分:0)

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

这将编译类似你拥有的循环:

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

答案 3 :(得分:0)

应该阅读

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 ++中声明(和@DonFego指出的那样)。