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

时间:2019-04-28 19:51:58

标签: c struct header-files

当尝试使用在头文件中定义的grep -Po '"byteCount":.*?[^\\]",'时,总是遇到编译器问题。

我有两个文件: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

我正在写一个小程序来用C进行一些模块化编程,但是我遇到了以下编译器错误:

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

#endif

当我在文件node.h:5:21: error: expected ‘{’ before ‘*’ token struct NODE *next; ^ 中直接定义main.c时,我可以编译struct并执行我想做的事情,但是由于某种原因,它不起作用如果我将定义放在头文件中,然后尝试将其包含在main.c中。这非常令人沮丧,我敢肯定这是一件小事,但是有人可以告诉我为什么这不起作用吗?从我一直在阅读的书中,我应该能够做到这一点,不是吗?

非常感谢!

2 个答案:

答案 0 :(得分:6)

预处理器未将NODE扩展为任何内容,因为您已使用宏对其进行了定义。更改头文件,使其看起来像这样:

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

#endif

答案 1 :(得分:3)

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

struct{
    int data;
    struct *next;
};

这应该回答您的问题,为什么将包含保护从NODE更改为NODE_H即可解决此问题。