C 有人能指出错误发生的原因吗?错误是;“预期”=&引用&“&引用&引用;asm";或“属性”之前的“属性”<&引用;

C 有人能指出错误发生的原因吗?错误是;“预期”=&引用&“&引用&引用;asm";或“属性”之前的“属性”<&引用;,c,malloc,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

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

  }
#包括
#包括
#包括
#包括
#包括“dictionary.h”
无符号整数计数=0;
无符号整数冲突=0;
无符号长索引=0;
#定义哈希表大小1999099
//初始化链表的结构。
类型定义结构节点{
字符字[46];
结构节点*下一步;
}节点;
//初始化节点指针数组。
节点*哈希表[哈希表大小];
for(无符号长i=0;i)(无符号长i=0;…
构造仅在C99中有效,我猜您的代码不是按照C99编译的(或者您的编译器不符合C99)

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


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

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

这将为循环编译,就像您拥有的循环:

for(unsigned long i = 0; i < HASHTABLE_SIZE; i++)
for(无符号长i=0;i
语句只允许在函数内部使用

在for循环之前,以及

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

它应该为

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));

  }
node*hashtable[hashtable_SIZE];
无符号长i;
对于(i=0;i//此处的错误读取“之前”应为“=”、“;”、“asm”或_属性所有这些都在同一个文件中吗?因为在你的问题中它是分开的,所以不清楚。你是用
-Wall
编译的吗?你没有收到其他警告吗?我不认为你在这里展示的代码显示了你的问题。而且,顺便说一句,不要强制转换
malloc
的返回值。你的“初始化”注释不正确。您正在声明内容,而不是初始化它们。@kevin,那么
for
循环不在函数中吗?您可以在C99中执行。请参阅aix的答案。@DanFego是的,这就是我的意思。我会编辑它,谢谢!=)主循环在另一个文件中。无法在此处添加main。无论循环是否在
main
中,它都必须在某些函数中。感谢它解决了问题。(尽管现在弹出了更多)。我可以看到它是如何工作的。再次感谢。
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));

  }