在尝试使用我在头文件中定义的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
。这非常令人沮丧,我确信这是一件小事,但有人可以告诉我为什么这不起作用?从我读过的内容来看,我应该可以做到这一点,不是吗?
非常感谢!
预处理器正在将NODE
扩展为空,因为您已使用宏定义它。将您的头文件更改为如下所示:
#ifndef NODE_H
#define NODE_H
struct NODE{
int data;
struct NODE *next;
};
#endif
您将宏NODE定义为无。从那时起,源代码中的每个NODE都不会被替换。所以你的头文件实际上是:
struct{
int data;
struct *next;
};
这应该回答你的问题为什么将包含守卫从NODE改为NODE_H修复它。