在C中包含保护问题(编译器仍然报告重定义错误)



AS标题说我在使用include防护程序时遇到问题。我不确定我是否正确使用了它们,所以我已经检查了几个相关的帖子,它们都包含了似乎与我相同的代码。请告诉我我使用护具有什么问题。

就上下文而言,我有几个头文件,我希望能够在其他程序中使用,因为多个文件包含相同的依赖项头(一个linkedList文件(,这就是问题所在。即使我似乎有include guards,编译器仍然报告代码有重新定义错误。下面是无效的包含保护。

#ifndef UNI_LINKED_LIST_LIB_H
#define UNI_LINKED_LIST_LIB_H "uniLinkedListLibV02.h"
#include UNI_LINKED_LIST_LIB_H
#endif

我的理解是,如果我多次尝试包含此标头,#ifndef将返回false。在第一次包含时,它应该定义UNI_LINKED_LIST_H,然后包含库。

这是一个带有保护的.h文件:

// guard.h -- include file with a guard
#ifndef GUARD_H
#define GUARD_H
#define SPECIAL_VALUE   23
#endif

这里有一个使用它的.c文件:

// main.c -- program that includes the guarded file
#include <stdio.h>
#include "guard.h"
int
main(void)
{
printf("%dn",SPECIAL_VALUE);
return 0;
}

这是一个.c文件,其中错误地包含文件

// bad.c -- program that includes the guarded file _incorrectly_
#include <stdio.h>
// do _not_ do this:
#ifndef GUARD_H
#define GUARD_H
#include "guard.h"
#endif
int
main(void)
{
printf("%dn",SPECIAL_VALUE);
return 0;
}

这就是您所需要的:

#ifndef UNI_LINKED_LIST_LIB_H
#define UNI_LINKED_LIST_LIB_H 
#include "uniLinkedListLibV02.h"
rest of code goes here
#endif

您只需要定义UNI_LINKED_LIST_LIB_H,该值无关紧要。

最新更新