头文件中结构定义的编译器错误

问题描述 投票:2回答:2

在尝试使用我在头文件中定义的struct时,我不断遇到编译器问题。

我有两个文件:main.c

     #include <stdio.h>
     #include <stdlib.h>
     #include "node.h"

     int main(){
         struct NODE node;
         node.data = 5;
         printf("%d\n", node.data);
         return 0;
     }

以及node.h

#ifndef NODE
#define NODE
    struct NODE{
        int data;
        struct NODE *next;
    };

#endif

我正在编写一个小程序来练习C语言中的一些模块化编程,但是我得到了以下编译器错误:

node.h:5:21: error: expected ‘{’ before ‘*’ token
         struct NODE *next;
                     ^

当我在main.c文件中直接定义struct时,我得到main.c进行编译并执行我想要的操作,但由于某种原因,如果我将定义放在头文件中然后尝试包含它,它将无法工作在main.c。这非常令人沮丧,我确信这是一件小事,但有人可以告诉我为什么这不起作用?从我读过的内容来看,我应该可以做到这一点,不是吗?

非常感谢!

c struct header-files
2个回答
6
投票

预处理器正在将NODE扩展为空,因为您已使用宏定义它。将您的头文件更改为如下所示:

#ifndef NODE_H
#define NODE_H
    struct NODE{
        int data;
        struct NODE *next;
    };

#endif

3
投票

您将宏NODE定义为无。从那时起,源代码中的每个NODE都不会被替换。所以你的头文件实际上是:

struct{
    int data;
    struct *next;
};

这应该回答你的问题为什么将包含守卫从NODE改为NODE_H修复它。

© www.soinside.com 2019 - 2024. All rights reserved.