我有一个包含警卫设置的头文件。我的项目中有多个C文件需要使用此头文件进行编译。当我去编译但是我得到一个错误,说这个函数已经被另一个文件包含了。包括警卫不应该防止这种情况发生?理论上我相信我应该能够导入这个文件很多次,而不是这个问题。与包含警卫的C问题
#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:
也许使用'#pragma once' –
关于__BST_INCLUDED,恐惧双下划线! [双下划线被保留供库实现使用](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier)不好,真的怪异,难以调试的事情可能发生,如果你这样做,并与一些库标识符相冲突,所以不要。 – user4581301
@ user4581301:所以文件范围是单个下划线。 – Olaf