C问题包括守卫

C Issue with include guards

我有一个包含防护设置的头文件。我的项目中有多个 C 文件需要此头文件进行编译。然而,当我去编译时,我收到一条错误消息,指出该函数已经包含在另一个文件中。 include guard 不应该阻止这种情况发生吗?理论上我相信我应该能够多次导入这个文件而不会出现这个问题。

#ifndef __BST_INCLUDED
#define __BST_INCLUDED__

//bunch of code here

#endif

错误:

bst.h:22:13: error: conflicting types for ‘pruneBSTNode’
 extern void pruneBSTNode(bst *tree,bstNode *node);
             ^
In file included from vbst.h:5:0,
                 from bstrees.c:7:
#ifndef __BST_INCLUDED
#define __BST_INCLUDED__
//bunch of code here
#endif

这不会保护任何东西。原因很简单,__BST_INCLUDED____BST_INCLUDED 不同,并且 __BST_INCLUDED 永远不会被定义。

还有:

bst.h:22:13: error: conflicting types for ‘pruneBSTNode’
 extern void pruneBSTNode(bst *tree,bstNode *node);
         ^
In file included from vbst.h:5:0,
                 from bstrees.c:7:

这个错误并没有告诉你 "the function has been included from another file",这是一个完全不相关的错误。 "included from" 部分只是告诉您编译器如何到达其后显示的行(问题中缺少)。

你的 include 守卫很好。问题是您已经为 pruneBSTNode 函数声明了多个不同的签名。确保 header 和 .c 文件在 return 类型和参数类型上一致。

__BST_INCLUDED

不一样
__BST_INCLUDED__. 

此外,在编译 headers 时,我的建议是您对 include guards 使用更通用的约定

#ifndef FILE_NAME_HPP
#define FILE_NAME_HPP


#endif

但是,唉,就像其他人说的那样。你的错误不是来自那里。