C - Xcode 中的重定义错误

标签 c xcode header-files redefinition

我的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;
}

最佳答案

entry 最初作为关键字保留,后来宣布过时。所以旧的编译器不允许它(见 this question )。更改结构的名称,一切都应该没问题。

关于C - Xcode 中的重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29936015/

相关文章:

ios - 此崩溃报告中是否有任何有用的信息?

ios - StackView 的水平分布不起作用

C 头文件/源文件 - enum typedef

c - 树+递归

c - 为什么编译器不能(或不)将可预测的加法循环优化为乘法?

由于 undefined symbol : __swift_FORCE_LOAD_$_swiftUIKit,Xcode 构建失败

c++ - 如何用头文件确定函数定义?

c++ - 定位/下载头文件 R.h 和 Rmath 用于 C 与 R 接口(interface)

c - 为什么 Linux 在目录上使用 getdents() 而不是 read()?

c - 在 Fedora 上用线程编译 C 函数的问题