Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中新定义的结构的外部_C_Compilation_Extern - Fatal编程技术网

C中新定义的结构的外部

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 但是,

我在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

但是,我使用的是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

在所有头文件中都这样做是一种很好的做法。

为什么不显示实际产生错误的代码?为什么不显示实际产生错误的代码?