Кто-нибудь может указать, почему происходит ошибка? Ошибка "ожидается" = ","; "," asm "или __attribute__ перед" <" - PullRequest
2 голосов
/ 18 января 2012

Что я пытаюсь сделать, это словарь со связанным списком.Существует массив указателей узлов.Я пытаюсь инициализировать каждый указатель массива с помощью 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 ]

6 голосов
/ 18 января 2012

Операторы допускаются только внутри функций.

Добавьте

int main(void) {

перед циклом for и

    return 0;
}

после него.Или, если main находится в другом файле, определите другую функцию, которая будет содержать цикл.

3 голосов
/ 18 января 2012

Поскольку конструкция for(unsigned long i = 0; ... допустима только в C99, я предполагаю, что вы не компилируете свой код как C99 (или ваш компилятор не совместим с C99).

Простой способ проверить это - переместить объявление i в верхнюю часть блока кода.

Я предполагаю, что то, что вы показываете нам не во всем блоке компиляции, а в отрывках из него. Если это предположение неверно, а код, который вы показали, находится за пределами всех функций, то вам нужно заключить его в функцию, как объясняет @Keith Thompson.

0 голосов
/ 18 января 2012

Должно читаться

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

  }

Вы не можете объявить переменную внутри for() в C, только в C ++ и (как указал @DonFego) в C99.

0 голосов
/ 18 января 2012

Если вы хотите использовать циклы for при объявлении переменных внутри них, вы должны использовать стандарт C99.Я не знаю о других компиляторах, но с помощью gcc вам нужно будет передать флаг --std=c99.

. Это скомпилирует для циклов, подобных тому, который вы имеете:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...