C - ошибка переопределения в Xcode

Мой заголовочный файл c имеет следующее сообщение об ошибке в Xcode

Redefinition of 'entry'

Но он прекрасно работает, когда я компилирую его gcc в командной строке. Кто-нибудь из вас может объяснить, почему?

Это snapshot.h:

#ifndef SNAPSHOT_H
#define SNAPSHOT_H

#define MAX_KEY_LENGTH 16
#define MAX_LINE_LENGTH 1024

typedef struct value value;
typedef struct entry entry;
typedef struct snapshot snapshot;

struct value {
    value* prev;
    value* next;
    int value;
};

// the line below is where the redefinition error appears
struct entry {
    entry* prev;
    entry* next;
    value* values;
    char key[MAX_KEY_LENGTH];
};

struct snapshot {
    snapshot* prev;
    snapshot* next;
    entry* entries;
    int id;
};

#endif

Это снимок.c:

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include "snapshot.h"

int
main(int argc, char *argv[]){
    int x = 7;
    printf("x= %d\n" , x);
    printf("value = %d\n", 1);
    return 0;
}

1 ответ

Решение

entry первоначально был зарезервирован как ключевое слово, а затем объявлен устаревшим. Поэтому старые компиляторы не позволяют этого (см. Этот вопрос). Измените имя структуры, и все должно быть хорошо.

Другие вопросы по тегам