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