当尝试使用在头文件中定义的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
中。这非常令人沮丧,我敢肯定这是一件小事,但是有人可以告诉我为什么这不起作用吗?从我一直在阅读的书中,我应该能够做到这一点,不是吗?
非常感谢!
答案 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即可解决此问题。