C中新定义的结构的外部
我在main中使用了node结构,但是node的定义和它的操作操作是在名为node的目录中的一个文件中进行本地化的/ 我创建了NODE/NODE.h,它具有:C中新定义的结构的外部,c,compilation,extern,C,Compilation,Extern,我在main中使用了node结构,但是node的定义和它的操作操作是在名为node的目录中的一个文件中进行本地化的/ 我创建了NODE/NODE.h,它具有: typedef struct node node; struct node { int my_reg; node *left; node *right; } ; 我创建了NODE/NODE.c并在其中包含NODE.h,其中包含NODE\u insert NODE\u remove 但是,
typedef struct node node;
struct node
{
int my_reg;
node *left;
node *right;
} ;
我创建了NODE/NODE.c并在其中包含NODE.h,其中包含NODE\u insert NODE\u remove
但是,我使用的是school_address.c中的节点结构,其中还包括node/node.h和node/node.c
我试着把
extern结构节点
校内地址
但是代码没有编译,并且抱怨node.h中的重新定义
有什么想法吗?
extern
用于变量,而不是类型定义。您应该只在需要了解struct node
的所有模块中包含标题;它被替换为整个标题的内联内容
你不应该做的是在另一个C文件中包含一个C文件。相反,您应该在头中声明公共函数的原型
例如:
如果将节点的原型插入
标题中
typedef struct node node;
struct node
{
int my_reg;
node *left;
node *right;
};
struct node *node_insert(struct node *, int); // or whatever the prototype is
int main()
{
// whatever
}
C预处理器完成后,因此
struct node
和node\u insert
在main
extern
中可见,而不是类型定义。您应该只在需要了解struct node
的所有模块中包含标题;它被替换为整个标题的内联内容
你不应该做的是在另一个C文件中包含一个C文件。相反,您应该在头中声明公共函数的原型
例如:
如果将节点的原型插入
标题中
typedef struct node node;
struct node
{
int my_reg;
node *left;
node *right;
};
struct node *node_insert(struct node *, int); // or whatever the prototype is
int main()
{
// whatever
}
C预处理器完成后,在main
中可以看到struct node
和node\u insert
具体来说,使用
#ifndef node_h_
#define node_h_ 1
在node.h的开头,以及相应的
#endif
最后
另外,不要包含.c
文件。您正在寻找一个
具体来说,使用
#ifndef node_h_
#define node_h_ 1
在node.h的开头,以及相应的
#endif
最后
另外,不要包含
.c
文件。当头文件包含在多个c文件中时,必须将它们包含在预处理器指令中,以避免双重定义,例如:
#ifndef __NODE_H_INCLUDED__
#define __NODE_H_INCLUDED__
struct node...
#endif
最好在所有头文件中都这样做。当头文件包含在多个C文件中时,必须将它们包含在预处理器指令中,以避免双重定义,例如:
#ifndef __NODE_H_INCLUDED__
#define __NODE_H_INCLUDED__
struct node...
#endif
在所有头文件中都这样做是一种很好的做法。为什么不显示实际产生错误的代码?为什么不显示实际产生错误的代码?